79 lines
3.0 KiB
Python
79 lines
3.0 KiB
Python
from fastapi import APIRouter, Depends, HTTPException, status
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from app.database import get_db
|
|
from app.dependencies import get_current_user_id
|
|
from app.schemas.user import SubmitAuditResponse, UserProfileResponse, UserUpdateRequest
|
|
from app.services.match_service import get_public_user_info
|
|
from app.services.user_service import get_user_by_id, submit_user_audit, update_user_profile
|
|
from app.utils.media import sanitize_user_media_payload
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get("/me")
|
|
async def get_me(
|
|
current_user_id: int = Depends(get_current_user_id),
|
|
session: AsyncSession = Depends(get_db),
|
|
) -> dict:
|
|
user = await get_user_by_id(session, current_user_id)
|
|
if user is None:
|
|
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="User not found")
|
|
|
|
data = sanitize_user_media_payload(UserProfileResponse.model_validate(user).model_dump())
|
|
return {"code": 0, "message": "ok", "data": data}
|
|
|
|
|
|
@router.put("/me")
|
|
async def update_me(
|
|
payload: UserUpdateRequest,
|
|
current_user_id: int = Depends(get_current_user_id),
|
|
session: AsyncSession = Depends(get_db),
|
|
) -> dict:
|
|
user = await get_user_by_id(session, current_user_id)
|
|
if user is None:
|
|
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="User not found")
|
|
|
|
try:
|
|
updated_user = await update_user_profile(session, user, payload)
|
|
except ValueError as exc:
|
|
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=str(exc)) from exc
|
|
|
|
data = sanitize_user_media_payload(UserProfileResponse.model_validate(updated_user).model_dump())
|
|
return {"code": 0, "message": "ok", "data": data}
|
|
|
|
|
|
@router.post("/submit-audit")
|
|
async def submit_audit(
|
|
current_user_id: int = Depends(get_current_user_id),
|
|
session: AsyncSession = Depends(get_db),
|
|
) -> dict:
|
|
user = await get_user_by_id(session, current_user_id)
|
|
if user is None:
|
|
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="User not found")
|
|
|
|
updated_user, missing_fields = await submit_user_audit(session, user)
|
|
if missing_fields:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_400_BAD_REQUEST,
|
|
detail=f"Missing required fields: {', '.join(missing_fields)}",
|
|
)
|
|
|
|
data = SubmitAuditResponse(audit_status=updated_user.audit_status, message="资料已提交审核").model_dump()
|
|
return {"code": 0, "message": "ok", "data": data}
|
|
|
|
|
|
@router.get("/public/{user_id}")
|
|
async def get_public_user(
|
|
user_id: int,
|
|
current_user_id: int = Depends(get_current_user_id),
|
|
session: AsyncSession = Depends(get_db),
|
|
) -> dict:
|
|
current_user = await get_user_by_id(session, current_user_id)
|
|
target_user = await get_user_by_id(session, user_id)
|
|
if current_user is None or target_user is None:
|
|
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="User not found")
|
|
|
|
data = await get_public_user_info(session, current_user, target_user)
|
|
return {"code": 0, "message": "ok", "data": data}
|