11from typing import Optional
22from fastapi import APIRouter , HTTPException , Query
3- from sqlmodel import exists , or_ , select
3+ from sqlmodel import exists , or_ , select , delete as sqlmodel_delete
4+ from apps .system .crud .user import clean_user_cache
5+ from apps .system .crud .workspace import reset_single_user_oid , reset_user_oid
46from apps .system .models .system_model import UserWsModel , WorkspaceBase , WorkspaceEditor , WorkspaceModel
57from apps .system .models .user import UserModel
68from apps .system .schemas .system_schema import UserWsBase , UserWsDTO , UserWsEditor , UserWsOption , WorkspaceUser
@@ -118,21 +120,27 @@ async def create(session: SessionDep, current_user: CurrentUser, creator: UserWs
118120 })
119121 for uid in creator .uid_list
120122 ]
123+ for uid in creator .uid_list :
124+ await reset_single_user_oid (session , uid , oid )
125+ await clean_user_cache (uid )
126+
121127 session .add_all (db_model_list )
122128 session .commit ()
123129
124130@router .put ("/uws" )
125131async def edit (session : SessionDep , editor : UserWsEditor ):
126132 if not editor .oid or not editor .uid :
127- raise RuntimeError ("param [oid, uid] miss" )
133+ raise HTTPException ("param [oid, uid] miss" )
128134 db_model = session .exec (select (UserWsModel ).where (UserWsModel .uid == editor .uid , UserWsModel .oid == editor .oid )).first ()
129135 if not db_model :
130- raise RuntimeError ("uws not exist" )
136+ raise HTTPException ("uws not exist" )
131137 if editor .weight == db_model .weight :
132138 return
133139
134140 db_model .weight = editor .weight
135141 session .add (db_model )
142+
143+ await clean_user_cache (editor .uid )
136144 session .commit ()
137145
138146@router .delete ("/uws" )
@@ -145,6 +153,11 @@ async def delete(session: SessionDep, current_user: CurrentUser, dto: UserWsBase
145153 raise HTTPException (f"UserWsModel not found" )
146154 for db_model in db_model_list :
147155 session .delete (db_model )
156+
157+ for uid in dto .uid_list :
158+ await reset_single_user_oid (session , uid , oid , False )
159+ await clean_user_cache (uid )
160+
148161 session .commit ()
149162
150163@router .get ("" , response_model = list [WorkspaceModel ])
@@ -167,7 +180,7 @@ async def update(session: SessionDep, editor: WorkspaceEditor):
167180 id = editor .id
168181 db_model = session .get (WorkspaceModel , id )
169182 if not db_model :
170- raise ValueError (f"WorkspaceModel with id { id } not found" )
183+ raise HTTPException (f"WorkspaceModel with id { id } not found" )
171184 update_data = WorkspaceModel .model_validate (editor )
172185 db_model .sqlmodel_update (update_data )
173186 session .add (db_model )
@@ -177,16 +190,27 @@ async def update(session: SessionDep, editor: WorkspaceEditor):
177190async def get_one (session : SessionDep , trans : Trans , id : int ):
178191 db_model = session .get (WorkspaceModel , id )
179192 if not db_model :
180- raise ValueError (f"WorkspaceModel with id { id } not found" )
193+ raise HTTPException (f"WorkspaceModel with id { id } not found" )
181194 if db_model .name .startswith ('i18n' ):
182195 db_model .name = trans (db_model .name )
183196 return db_model
184197
185198@router .delete ("/{id}" )
186- async def delete (session : SessionDep , id : int ):
199+ async def single_delete (session : SessionDep , id : int ):
187200 db_model = session .get (WorkspaceModel , id )
188201 if not db_model :
189- raise ValueError (f"WorkspaceModel with id { id } not found" )
202+ raise HTTPException (f"WorkspaceModel with id { id } not found" )
203+
204+ user_ws_list = session .exec (select (UserWsModel ).where (UserWsModel .oid == id )).all ()
205+ if user_ws_list :
206+ # clean user cache
207+ for user_ws in user_ws_list :
208+ await clean_user_cache (user_ws .uid )
209+ # reset user default oid
210+ await reset_user_oid (session , id )
211+ # delete user_ws
212+ session .exec (sqlmodel_delete (UserWsModel ).where (UserWsModel .oid == id ))
213+
190214 session .delete (db_model )
191215 session .commit ()
192216
0 commit comments