11from typing import Optional
22from fastapi import APIRouter , Query
3- from sqlmodel import func , or_ , select
4- from apps .system .crud .user import get_db_user , user_ws_options
3+ from sqlmodel import func , or_ , select , delete as sqlmodel_delete
4+ from apps .system .crud .user import get_db_user , single_delete , user_ws_options
55from apps .system .models .system_model import UserWsModel , WorkspaceModel
66from apps .system .models .user import UserModel
77from apps .system .schemas .auth import CacheName , CacheNamespace
@@ -20,6 +20,7 @@ async def user_info(current_user: CurrentUser):
2020@router .get ("/pager/{pageNum}/{pageSize}" , response_model = PaginatedResponse [UserGrid ])
2121async def pager (
2222 session : SessionDep ,
23+ trans : Trans ,
2324 pageNum : int ,
2425 pageSize : int ,
2526 keyword : Optional [str ] = Query (None , description = "搜索关键字(可选)" ),
@@ -67,10 +68,21 @@ async def pager(
6768 )
6869 )
6970
70- return await paginator .get_paginated_response (
71+ user_page = await paginator .get_paginated_response (
7172 stmt = stmt ,
7273 pagination = pagination ,
7374 ** filters )
75+
76+ for item in user_page .items :
77+ space_name : str = item ['space_name' ]
78+ if space_name and 'i18n_default_workspace' in space_name :
79+ parts = list (map (
80+ lambda x : trans (x ) if x == "i18n_default_workspace" else x ,
81+ space_name .split (',' )
82+ ))
83+ output_str = ',' .join (parts )
84+ item ['space_name' ] = output_str
85+ return user_page
7486
7587@router .get ("/ws" )
7688async def ws_options (session : SessionDep , current_user : CurrentUser , trans : Trans ) -> list [UserWs ]:
@@ -88,9 +100,13 @@ async def ws_change(session: SessionDep, current_user: CurrentUser, oid: int):
88100 session .commit ()
89101
90102@router .get ("/{id}" , response_model = UserEditor )
91- async def query (session : SessionDep , id : int ) -> UserEditor :
103+ async def query (session : SessionDep , trans : Trans , id : int ) -> UserEditor :
92104 db_user : UserModel = get_db_user (session = session , user_id = id )
93- return db_user
105+ u_ws_options = await user_ws_options (session , id , trans )
106+ result = UserEditor .model_validate (db_user .model_dump ())
107+ if u_ws_options :
108+ result .oid_list = [item .id for item in u_ws_options ]
109+ return result
94110
95111@router .post ("" )
96112async def create (session : SessionDep , creator : UserCreator ):
@@ -99,28 +115,53 @@ async def create(session: SessionDep, creator: UserCreator):
99115 #user_model.create_time = get_timestamp()
100116 user_model .language = "zh-CN"
101117 session .add (user_model )
118+ if creator .oid_list :
119+ # need to validate oid_list
120+ db_model_list = [
121+ UserWsModel .model_validate ({
122+ "oid" : oid ,
123+ "uid" : user_model .id ,
124+ "weight" : 0
125+ })
126+ for oid in creator .oid_list
127+ ]
128+ session .add_all (db_model_list )
102129 session .commit ()
103130
104131@router .put ("" )
105132@clear_cache (namespace = CacheNamespace .AUTH_INFO , cacheName = CacheName .USER_INFO , keyExpression = "editor.id" )
106133async def update (session : SessionDep , editor : UserEditor ):
107134 user_model : UserModel = get_db_user (session = session , user_id = editor .id )
135+
136+ del_stmt = sqlmodel_delete (UserWsModel ).where (UserWsModel .uid == editor .id )
137+ session .exec (del_stmt )
138+
108139 data = editor .model_dump (exclude_unset = True )
109140 user_model .sqlmodel_update (data )
110141 session .add (user_model )
142+
143+ if editor .oid_list :
144+ # need to validate oid_list
145+ db_model_list = [
146+ UserWsModel .model_validate ({
147+ "oid" : oid ,
148+ "uid" : user_model .id ,
149+ "weight" : 0
150+ })
151+ for oid in editor .oid_list
152+ ]
153+ session .add_all (db_model_list )
154+
111155 session .commit ()
112156
113157@router .delete ("/{id}" )
114- @clear_cache (namespace = CacheNamespace .AUTH_INFO , cacheName = CacheName .USER_INFO , keyExpression = "id" )
115158async def delete (session : SessionDep , id : int ):
116- user_model : UserModel = get_db_user (session = session , user_id = id )
117- session .delete (user_model )
118- session .commit ()
159+ await single_delete (session , id )
119160
120161@router .delete ("" )
121162async def batch_del (session : SessionDep , id_list : list [int ]):
122163 for id in id_list :
123- delete (session , id )
164+ await single_delete (session , id )
124165
125166@router .put ("/language" )
126167@clear_cache (namespace = CacheNamespace .AUTH_INFO , cacheName = CacheName .USER_INFO , keyExpression = "current_user.id" )
0 commit comments