提供基本前后端骨架
This commit is contained in:
103
app/api/v1/endpoints/users.py
Normal file
103
app/api/v1/endpoints/users.py
Normal file
@@ -0,0 +1,103 @@
|
||||
"""
|
||||
用户相关 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="用户不存在",
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user