zhaoqingang
2024-12-12 057f034d4cd728c1bd0284e7c6b4a47739d5220d
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
110
111
112
113
114
115
116
117
118
119
120
121
122
from fastapi import APIRouter, Depends
from app.api import Response, pwd_context, get_current_user, ResponseList
from app.models.public_api_model import AppRegisterModel
from app.models.base_model import get_db
from app.models.user import PageParameter, UserStatus, UserInfo, LoginData
from app.models.user_model import UserModel
from app.service.auth import is_valid_password
from app.service.user import get_user_list, edit_user_status, delete_user_data, create_user, edit_user_data, \
    edit_user_pwd, get_user_info, get_user_routers, get_user_menus, get_user_permission, get_user_dept
 
user_router = APIRouter()
 
 
@user_router.get("/list", response_model=Response)
async def user_list(current:int, pageSize:int, keyword="", current_user: UserModel = Depends(get_current_user),
                    db=Depends(get_db)):
    return Response(code=200, msg="", data=await get_user_list(db, current, pageSize, keyword,
                                                               current_user.permission, current_user.id))
 
 
@user_router.post("/add_user", response_model=Response)
async def add_user(user: UserInfo, current_user: UserModel = Depends(get_current_user), db=Depends(get_db)):
    if not user.userName:
        return Response(code=400, msg="The userName cannot be empty!")
    if user.pwd:
        if not is_valid_password(user.pwd):
            return Response(code=400, msg="The password must be at least 8 and contain both numbers and letters")
    db_user = db.query(UserModel).filter(UserModel.username == user.userName).first()
    if db_user:
        return Response(code=200, msg="user already created")
    pwd = user.pwd
    if not pwd:
        pwd = "basic123456"
    is_create = await create_user(db, user.userName, user.email, user.phone, user.loginName, pwd, user.roles,
                                  user.groups, current_user.id)
    if not is_create:
        return Response(code=500, msg="user create failure", data={})
    return Response(code=200, msg="user create successfully", data={})
 
 
@user_router.put("/edit_user", response_model=Response)
async def edit_user(user: UserInfo, current_user: UserModel = Depends(get_current_user), db=Depends(get_db)):
    # if not user.userName:
    #     return Response(code=400, msg="The userName cannot be empty!")
    user_info = db.query(UserModel).filter(UserModel.id == user.userId).first()
    if not user_info:
        return Response(code=200, msg="user does not exist")
    # db_user = db.query(UserModel).filter(UserModel.username == user.userName).first()
    # if db_user and db_user.id != user.userId:
    #     return Response(code=200, msg="user already created")
    is_edit = await edit_user_data(db, user.userId, user.email, user.phone, user.loginName, user.roles, user.groups)
    if not is_edit:
        return Response(code=500, msg="user edit failure", data={})
    return Response(code=200, msg="user edit successfully", data={})
 
 
@user_router.put("/change_status", response_model=Response)
async def change_user_status(user: UserStatus, current_user: UserModel = Depends(get_current_user), db=Depends(get_db)):
    if user.status not in ["0", "1"]:
        return Response(code=400, msg="The status cannot be {}!".format(user.status))
    db_user = db.query(UserModel).filter(UserModel.id == user.userId).first()
    if not db_user:
        return Response(code=200, msg="user does not exist")
    is_edit = await edit_user_status(db, user.status, user.userId)
    if not is_edit:
        return Response(code=500, msg="user status edit failure", data={})
    return Response(code=200, msg="user status edit successfully", data={})
 
 
@user_router.delete("/delete_user/{user_id}", response_model=Response)
async def delete_user(user_id, current_user: UserModel = Depends(get_current_user), db=Depends(get_db)):
    db_user = db.query(UserModel).filter(UserModel.id == user_id).first()
    if not db_user:
        return Response(code=200, msg="user does not exist")
    is_edit = await delete_user_data(db, user_id)
    if not is_edit:
        return Response(code=500, msg="user delete failure", data={})
    return Response(code=200, msg="user delete successfully", data={})
 
 
@user_router.put("/reset_pwd", response_model=Response)
async def reset_user_pwd(user: UserStatus,  current_user: UserModel = Depends(get_current_user),db=Depends(get_db)):
    is_edit = await edit_user_pwd(db, user.userId, current_user.id)
    if not is_edit:
        return Response(code=500, msg="user pwd reset failure", data={})
    return Response(code=200, msg="user pwd reset successfully", data={})
 
 
@user_router.get("/user_info", response_model=Response)
async def user_info(current_user: UserModel = Depends(get_current_user),db=Depends(get_db)):
    user_info = await get_user_info(db,  current_user.id)
    if not user_info:
        return Response(code=500, msg="user get failure", data={})
    return Response(code=200, msg="successfully", data=user_info)
 
 
@user_router.get("/user_routers", response_model=Response)
async def user_routers(current_user: UserModel = Depends(get_current_user),db=Depends(get_db)):
    routers = await get_user_routers(db,  current_user.id)
    if not routers:
        return Response(code=500, msg="user get failure", data={})
    return Response(code=200, msg="successfully", data=routers)
 
 
@user_router.get("/menus", response_model=ResponseList)
async def user_menus(keyword="", current_user: UserModel = Depends(get_current_user),db=Depends(get_db)):
    menus = await get_user_menus(db,  current_user.id)
    # return Response(code=200, msg="successfully", data=menus)
    # result = [item.to_dict() for item in agents]
    return ResponseList(code=200, msg="successfully", data=menus)
 
 
@user_router.get("/permission", response_model=Response)
async def user_permission(userId:int, current_user: UserModel = Depends(get_current_user),db=Depends(get_db)):
    menus = await get_user_permission(db,  userId)
    return Response(code=200, msg="successfully", data=menus)
 
 
@user_router.get("/dept", response_model=Response)
async def user_dept_api(userId:int, current_user: UserModel = Depends(get_current_user),db=Depends(get_db)):
    menus = await get_user_dept(db, userId)
    return Response(code=200, msg="successfully", data=menus)