xiangqinxiaochengxu/backend/app/routers/users.py
2026-04-17 10:49:14 +08:00

78 lines
2.9 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
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 = 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 = 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}