104 lines
2.5 KiB
Python
104 lines
2.5 KiB
Python
"""
|
|
用户相关 API
|
|
|
|
包括获取用户信息、更新用户资料等接口。
|
|
"""
|
|
|
|
from fastapi import APIRouter, HTTPException, status
|
|
|
|
from app.api.deps import ActiveUser, DbSession
|
|
from app.core.exceptions import ResourceConflictError, UserNotFoundError
|
|
from app.schemas.base import APIResponse
|
|
from app.schemas.user import UserResponse, UserUpdate
|
|
from app.services.user import UserService
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get(
|
|
"/me",
|
|
response_model=APIResponse[UserResponse],
|
|
summary="获取当前用户信息",
|
|
description="获取当前登录用户的详细信息",
|
|
)
|
|
async def get_current_user_info(
|
|
current_user: ActiveUser,
|
|
) -> APIResponse[UserResponse]:
|
|
"""
|
|
获取当前用户信息
|
|
|
|
返回当前登录用户的完整信息。
|
|
"""
|
|
return APIResponse.ok(
|
|
data=UserResponse.model_validate(current_user),
|
|
)
|
|
|
|
|
|
@router.patch(
|
|
"/me",
|
|
response_model=APIResponse[UserResponse],
|
|
summary="更新当前用户信息",
|
|
description="更新当前登录用户的资料",
|
|
)
|
|
async def update_current_user(
|
|
update_data: UserUpdate,
|
|
current_user: ActiveUser,
|
|
session: DbSession,
|
|
) -> APIResponse[UserResponse]:
|
|
"""
|
|
更新当前用户信息
|
|
|
|
支持更新:
|
|
- **nickname**: 昵称
|
|
- **email**: 邮箱
|
|
- **avatar_url**: 头像 URL
|
|
- **bio**: 个人简介
|
|
"""
|
|
user_service = UserService(session)
|
|
|
|
try:
|
|
user = await user_service.update_user(
|
|
user_id=current_user.id,
|
|
update_data=update_data,
|
|
)
|
|
return APIResponse.ok(
|
|
data=UserResponse.model_validate(user),
|
|
message="更新成功",
|
|
)
|
|
except ResourceConflictError as e:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_409_CONFLICT,
|
|
detail=e.message,
|
|
)
|
|
|
|
|
|
@router.get(
|
|
"/{user_id}",
|
|
response_model=APIResponse[UserResponse],
|
|
summary="获取指定用户信息",
|
|
description="获取指定用户的公开信息",
|
|
)
|
|
async def get_user_by_id(
|
|
user_id: str,
|
|
current_user: ActiveUser,
|
|
session: DbSession,
|
|
) -> APIResponse[UserResponse]:
|
|
"""
|
|
获取指定用户信息
|
|
|
|
- **user_id**: 用户 ID
|
|
"""
|
|
user_service = UserService(session)
|
|
|
|
try:
|
|
user = await user_service.get_user_by_id(user_id)
|
|
return APIResponse.ok(
|
|
data=UserResponse.model_validate(user),
|
|
)
|
|
except UserNotFoundError:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_404_NOT_FOUND,
|
|
detail="用户不存在",
|
|
)
|
|
|