@@ -101,7 +101,7 @@ def create_user(
101101
102102@router .get (
103103 "/{user_id}" ,
104- status_code = 201 ,
104+ status_code = 200 ,
105105 responses = {
106106 404 : {
107107 "description" : """No user with specified UUID found""" ,
@@ -157,18 +157,20 @@ def delete_user(
157157
158158 Required scope: `{scope}`
159159 """
160- if User .objects .count () == 1 :
161- raise HTTPException (
162- status_code = 432 , detail = "Deletion not possible. Only one user left."
163- )
160+ with db .Session () as db_session :
161+ if usr_dbapi .get_users_count (db_session ) == 1 :
162+ raise HTTPException (
163+ status_code = 432 , detail = "Deletion not possible. Only one user left."
164+ )
164165
165166 try :
166167 if os .environ .get ("PAPERMERGE__REDIS__URL" ):
167168 delete_user_data .apply_async (kwargs = {"user_id" : str (user_id )})
168169 else :
169- delete_user_data (user_id )
170- except User .DoesNotExist :
171- raise HTTPException (status_code = 404 , detail = "Does not exists" )
170+ usr_dbapi .delete_user (db_session , user_id = user_id )
171+ except Exception as e :
172+ logger .error (e )
173+ raise HTTPException (status_code = 469 , detail = str (e ))
172174
173175
174176@router .patch ("/{user_id}" , status_code = 200 , response_model = schema .UserDetails )
@@ -191,3 +193,29 @@ def update_user(
191193 raise HTTPException (status_code = 404 , detail = error .model_dump ())
192194
193195 return user
196+
197+
198+ @router .post ("/{user_id}/change-password" , status_code = 200 , response_model = schema .UserDetails )
199+ @utils .docstring_parameter (scope = scopes .USER_UPDATE )
200+ def change_user_password (
201+ user_id : UUID ,
202+ attrs : schema .ChangeUserPassword ,
203+ cur_user : Annotated [
204+ schema .User , Security (get_current_user , scopes = [scopes .USER_UPDATE ])
205+ ],
206+ ) -> schema .UserDetails :
207+ """Change user password
208+
209+ Required scope: `{scope}`
210+ """
211+ with db .Session () as db_session :
212+ user , error = usr_dbapi .change_password (
213+ db_session ,
214+ user_id = UUID (attrs .userId ),
215+ password = attrs .password
216+ )
217+
218+ if error :
219+ raise HTTPException (status_code = 469 , detail = error .model_dump ())
220+
221+ return user
0 commit comments