diff --git a/core/routers/user/routes.py b/core/routers/user/routes.py index dbf37bd..633e5d9 100644 --- a/core/routers/user/routes.py +++ b/core/routers/user/routes.py @@ -18,6 +18,7 @@ from core.routers.auth.schema import LoginUser from core.routers.auth.services import get_current_user_form_http from . import schema +from .schema import UpdateUserIn user_router = APIRouter(prefix='/user', tags=['用户模块']) @@ -100,6 +101,20 @@ async def get_all_followers( } +@user_router.post('/me/update', summary='更新用户信息', response_model=base_schema.BaseResponse[schema.User]) +async def update_me( + payload: schema.UpdateUserIn, + login_user: LoginUser = Depends(get_current_user_form_http), + db_session: AsyncSession = Depends(get_async_session) +): + db_crud = CRUD(db_session, User) + result = await db_crud.update(payload.model_dump(exclude_none=True), filters={'user_id': login_user.user_id}) + if result is None: + raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail='无法操作') + + return {'data': result} + + @user_router.post('/follow/{user_id}/', summary='新增/取消关注用户', response_model=base_schema.BaseResponse) async def follow_user( user_id: int, diff --git a/core/routers/user/schema.py b/core/routers/user/schema.py index a7a9e1c..2666a51 100644 --- a/core/routers/user/schema.py +++ b/core/routers/user/schema.py @@ -8,7 +8,7 @@ from datetime import date from typing import Optional from fastapi.openapi.models import Schema -from pydantic import BaseModel +from pydantic import BaseModel, constr class User(BaseModel): @@ -38,3 +38,9 @@ class UserFollows(BaseModel): user_id: int gender: Optional[int] = None avatar_url: Optional[int] = None + + +class UpdateUserIn(BaseModel): + nickname: Optional[constr(max_length=20)] = None + gender: Optional[int] = None + avatar_url: Optional[constr(pattern='^http[a-zA-Z0-9:/\.]+')] = None