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}