controller.py 3.2 KB
Newer Older
Q
qq_27864871 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
__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()