提供基本前后端骨架

This commit is contained in:
hisatri
2026-01-06 23:49:23 +08:00
parent 84d4ccc226
commit 06f8176e23
89 changed files with 19293 additions and 2 deletions

View 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="用户不存在",
)