From ad83a47e6b534a8ac0ca9c889b4016105987942e Mon Sep 17 00:00:00 2001 From: xingc Date: Tue, 22 Apr 2025 18:27:34 +0800 Subject: [PATCH] =?UTF-8?q?feat(user):=20=E6=96=B0=E5=A2=9E=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E4=BF=A1=E6=81=AF=E4=B8=8A=E4=BC=A0=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/routers/user/routes.py | 15 +++++++++++++++ core/routers/user/schema.py | 8 +++++++- 2 files changed, 22 insertions(+), 1 deletion(-) 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