11from typing import Optional
2- from fastapi import APIRouter , Query
2+ from fastapi import APIRouter , HTTPException , Query
33from sqlmodel import func , or_ , select , delete as sqlmodel_delete
44from apps .system .crud .user import get_db_user , single_delete , user_ws_options
55from apps .system .models .system_model import UserWsModel
@@ -99,7 +99,7 @@ async def ws_options(session: SessionDep, current_user: CurrentUser, trans: Tran
9999async def ws_change (session : SessionDep , current_user : CurrentUser , oid : int ):
100100 ws_list : list [UserWs ] = await user_ws_options (session , current_user .id )
101101 if not any (x .id == oid for x in ws_list ):
102- raise RuntimeError (f"oid [{ oid } ] is invalid!" )
102+ raise HTTPException (f"oid [{ oid } ] is invalid!" )
103103 user_model : UserModel = get_db_user (session = session , user_id = current_user .id )
104104 user_model .oid = oid
105105 session .add (user_model )
@@ -120,7 +120,7 @@ async def create(session: SessionDep, creator: UserCreator):
120120 user_model = UserModel .model_validate (data )
121121 #user_model.create_time = get_timestamp()
122122 user_model .language = "zh-CN"
123- session . add ( user_model )
123+ user_model . oid = 0
124124 if creator .oid_list :
125125 # need to validate oid_list
126126 db_model_list = [
@@ -132,20 +132,22 @@ async def create(session: SessionDep, creator: UserCreator):
132132 for oid in creator .oid_list
133133 ]
134134 session .add_all (db_model_list )
135+ user_model .oid = creator .oid_list [0 ]
136+ session .add (user_model )
135137 session .commit ()
136138
137139@router .put ("" )
138140@clear_cache (namespace = CacheNamespace .AUTH_INFO , cacheName = CacheName .USER_INFO , keyExpression = "editor.id" )
139141async def update (session : SessionDep , editor : UserEditor ):
140142 user_model : UserModel = get_db_user (session = session , user_id = editor .id )
141-
143+ origin_oid : int = user_model . oid
142144 del_stmt = sqlmodel_delete (UserWsModel ).where (UserWsModel .uid == editor .id )
143145 session .exec (del_stmt )
144146
145147 data = editor .model_dump (exclude_unset = True )
146148 user_model .sqlmodel_update (data )
147- session .add (user_model )
148149
150+ user_model .oid = 0
149151 if editor .oid_list :
150152 # need to validate oid_list
151153 db_model_list = [
@@ -157,7 +159,8 @@ async def update(session: SessionDep, editor: UserEditor):
157159 for oid in editor .oid_list
158160 ]
159161 session .add_all (db_model_list )
160-
162+ user_model .oid = origin_oid if origin_oid in editor .oid_list else editor .oid_list [0 ]
163+ session .add (user_model )
161164 session .commit ()
162165
163166@router .delete ("/{id}" )
@@ -184,7 +187,7 @@ async def langChange(session: SessionDep, current_user: CurrentUser, language: U
184187@clear_cache (namespace = CacheNamespace .AUTH_INFO , cacheName = CacheName .USER_INFO , keyExpression = "id" )
185188async def pwdReset (session : SessionDep , current_user : CurrentUser , id : int ):
186189 if not current_user .isAdmin :
187- raise RuntimeError ('only for admin' )
190+ raise HTTPException ('only for admin' )
188191 db_user : UserModel = get_db_user (session = session , user_id = id )
189192 db_user .password = default_md5_pwd ()
190193 session .add (db_user )
@@ -195,7 +198,7 @@ async def pwdReset(session: SessionDep, current_user: CurrentUser, id: int):
195198async def pwdUpdate (session : SessionDep , current_user : CurrentUser , editor : PwdEditor ):
196199 db_user : UserModel = get_db_user (session = session , user_id = current_user .id )
197200 if not verify_md5pwd (editor .pwd , db_user .password ):
198- raise RuntimeError ("pwd error" )
201+ raise HTTPException ("pwd error" )
199202 db_user .password = md5pwd (editor .new_pwd )
200203 session .add (db_user )
201204 session .commit ()
0 commit comments