__author__ = "ziyan.yin" __describe__ = "user controller" from basex.core.entity import BusinessError, Page, ResultEntity from basex.core.enums import ResultEnum from fastapi import APIRouter from app.dependencies.permission import Permission from app.domains.user.data import UserById, UserMe from app.domains.user.entity import UserEntity, UserPasswordEntity from app.domains.user.model import SysUserModel from app.domains.user.service import UserService router = APIRouter(tags=["用户信息"], prefix="/users") @router.get("/me", name="当前用户", dependencies=[Permission()]) async def current_user_info(user: UserMe) -> ResultEntity[UserEntity]: """ 当前用户信息 """ if data := await UserService().get(user.identity): return ResultEntity.ok( UserEntity( id=data.id, username=data.username, nickname=data.nickname, gender=data.gender, avatar=data.avatar, is_admin=data.is_admin, ) ) raise BusinessError(ResultEnum.A0301) @router.put("/me/password", name="修改密码", dependencies=[Permission()]) async def reset_current_user(password: UserPasswordEntity, user: UserMe) -> ResultEntity: """ 当前用户修改密码 """ await UserService().reset_user_password( user.identity, old_password=password.old_password, password=password.new_password, ) return ResultEntity.ok() @router.get("/query", name="查询用户", dependencies=[Permission()]) async def query_user(current: int = 1, size: int = 10) -> ResultEntity[Page[SysUserModel]]: """ 查询用户列表 """ page = Page[SysUserModel](current=current, size=size) page = await UserService().paginate(page) return ResultEntity.ok(page) @router.post("", name="创建用户", dependencies=[Permission()]) async def create_user(user: SysUserModel) -> ResultEntity[SysUserModel]: """ 创建新用户 """ return ResultEntity.ok( await UserService().create_user( user.username, user.nickname, user.password, gender=user.gender, email=user.email, mobile=user.mobile, avatar=user.avatar, ) ) @router.get("/{index:int}", name="用户详情", dependencies=[Permission()]) async def get_user(user: UserById) -> ResultEntity[SysUserModel]: """ 用户信息 """ user.password = "" return ResultEntity.ok(user) @router.put("/{index:int}", name="修改用户", dependencies=[Permission()]) async def modify_user(origin_user: UserById, user: SysUserModel) -> ResultEntity[SysUserModel]: """ 修改用户信息 """ return ResultEntity.ok( await UserService().update( origin_user, nickname=user.nickname, email=user.email, gender=user.gender, mobile=user.mobile, avatar=user.avatar, ) ) @router.delete("/{index:int}", name="删除详情", dependencies=[Permission()]) async def delete_user(user: UserById) -> ResultEntity: """ 删除用户 """ await UserService().delete_user(user) return ResultEntity.ok()