"""用户相关接口"""
from typing import Annotated
from fastapi import APIRouter, Body, Depends, status, Query
from fastapi.responses import JSONResponse
from apps.dependency import get_user
from apps.schemas.request_data import UserUpdateRequest
from apps.schemas.response_data import UserGetMsp, UserGetRsp
from apps.schemas.user import UserInfo
from apps.services.user import UserManager
router = APIRouter(
prefix="/api/user",
tags=["user"],
)
@router.get("", response_model=UserGetRsp)
async def get_user_sub(
user_sub: Annotated[str, Depends(get_user)],
page_size: Annotated[int, Query(description="每页用户数量")] = 20,
page_cnt: Annotated[int, Query(description="当前页码")] = 1,
) -> JSONResponse:
"""查询所有用户接口"""
user_list, total = await UserManager.get_all_user_sub(page_cnt=page_cnt, page_size=page_size, filter_user_subs=[user_sub])
user_info_list = []
for user in user_list:
if user == user_sub:
continue
info = UserInfo(
userName=user,
userSub=user,
)
user_info_list.append(info)
return JSONResponse(
status_code=status.HTTP_200_OK,
content=UserGetRsp(
code=status.HTTP_200_OK,
message="用户数据详细信息获取成功",
result=UserGetMsp(userInfoList=user_info_list, total=total),
).model_dump(exclude_none=True, by_alias=True),
)
@router.post("")
async def update_user_info(
user_sub: Annotated[str, Depends(get_user)],
*,
data: Annotated[UserUpdateRequest, Body(..., description="用户更新信息")],
) -> JSONResponse:
"""更新用户信息接口"""
await UserManager.update_userinfo_by_user_sub(user_sub, data)
return JSONResponse(
status_code=status.HTTP_200_OK,
content={"code": status.HTTP_200_OK, "message": "用户信息更新成功"},
)