8
8
from sqlmodel import select
9
9
from sqlmodel .ext .asyncio .session import AsyncSession
10
10
11
- from sophrosyne .api .dependencies import auth_and_return_user , get_db_session , require_admin
11
+ from sophrosyne .api .dependencies import (
12
+ auth_and_return_user ,
13
+ get_db_session ,
14
+ require_admin ,
15
+ )
12
16
from sophrosyne .api .v1 .models import (
13
17
UsersCreateUserRequest ,
14
18
UsersCreateUserResponse ,
28
32
29
33
router = APIRouter ()
30
34
35
+ USER_NOT_FOUND = "User not found"
36
+
31
37
32
38
@router .post (
33
- "/users/create-user" , response_model = UsersCreateUserResponse , tags = [Tags .users ]
39
+ "/users/create-user" ,
40
+ response_model = UsersCreateUserResponse ,
41
+ tags = [Tags .users ],
42
+ dependencies = [Depends (require_admin )],
34
43
)
35
44
async def create_user (
36
45
* ,
37
46
db_session : AsyncSession = Depends (get_db_session ),
38
47
user : UsersCreateUserRequest ,
39
- require_admin = Depends (require_admin ),
40
48
):
41
49
"""Create a new user.
42
50
43
51
Args:
44
52
db_session (AsyncSession): The database session.
45
53
user (UsersCreateUserRequest): The request payload containing user data.
46
- require_admin (bool): The admin requirement dependency.
47
54
48
55
Returns:
49
56
UsersCreateUserResponse: The newly created user.
@@ -62,22 +69,23 @@ async def create_user(
62
69
63
70
64
71
@router .get (
65
- "/users/list-users" , response_model = UsersListUsersResponse , tags = [Tags .users ]
72
+ "/users/list-users" ,
73
+ response_model = UsersListUsersResponse ,
74
+ tags = [Tags .users ],
75
+ dependencies = Depends (require_admin ),
66
76
)
67
77
async def read_users (
68
78
* ,
69
79
db_session : AsyncSession = Depends (get_db_session ),
70
80
offset : int = 0 ,
71
81
limit : int = Query (100 , le = 100 ),
72
- require_admin = Depends (require_admin ),
73
82
):
74
83
"""Retrieve a list of users from the database.
75
84
76
85
Args:
77
86
db_session (AsyncSession): The database session.
78
87
offset (int): The offset for pagination. Defaults to 0.
79
88
limit (int): The maximum number of users to retrieve. Defaults to 100.
80
- require_admin (bool): The admin requirement dependency.
81
89
82
90
Returns:
83
91
UsersListUsersResponse: A list of user objects.
@@ -117,20 +125,22 @@ async def read_user(
117
125
result = await db_session .exec (select (User ).where (User .name == req .name ))
118
126
user = result .first ()
119
127
if not user :
120
- raise HTTPException (status_code = 400 , detail = "User not found" )
128
+ raise HTTPException (status_code = 400 , detail = USER_NOT_FOUND )
121
129
if current_user .name != user .name :
122
- raise HTTPException (status_code = 403 , detail = "User not found" )
130
+ raise HTTPException (status_code = 403 , detail = USER_NOT_FOUND )
123
131
return user
124
132
125
133
126
134
@router .patch (
127
- "/users/update-user" , response_model = UsersUpdateUserResponse , tags = [Tags .users ]
135
+ "/users/update-user" ,
136
+ response_model = UsersUpdateUserResponse ,
137
+ tags = [Tags .users ],
138
+ dependencies = [Depends (require_admin )],
128
139
)
129
140
async def update_user (
130
141
* ,
131
142
db_session : AsyncSession = Depends (get_db_session ),
132
143
req : UsersUpdateUserRequest ,
133
- require_admin = Depends (require_admin ),
134
144
):
135
145
"""Update a user in the database.
136
146
@@ -147,7 +157,7 @@ async def update_user(
147
157
result = await db_session .exec (select (User ).where (User .name == req .name ))
148
158
db_user = result .first ()
149
159
if not db_user :
150
- raise HTTPException (status_code = 400 , detail = "User not found" )
160
+ raise HTTPException (status_code = 400 , detail = USER_NOT_FOUND )
151
161
user_data = req .model_dump (exclude_unset = True )
152
162
db_user .sqlmodel_update (user_data )
153
163
db_session .add (db_user )
@@ -157,13 +167,15 @@ async def update_user(
157
167
158
168
159
169
@router .delete (
160
- "/users/delete-user" , response_model = UsersDeleteUserResponse , tags = [Tags .users ]
170
+ "/users/delete-user" ,
171
+ response_model = UsersDeleteUserResponse ,
172
+ tags = [Tags .users ],
173
+ dependencies = [Depends (require_admin )],
161
174
)
162
175
async def delete_user (
163
176
* ,
164
177
db_session : AsyncSession = Depends (get_db_session ),
165
178
req : UsersDeleteUserRequest ,
166
- require_admin = Depends (require_admin ),
167
179
):
168
180
"""Delete a user from the database.
169
181
@@ -177,7 +189,7 @@ async def delete_user(
177
189
result = await db_session .exec (select (User ).where (User .name == req .name ))
178
190
db_user = result .first ()
179
191
if not db_user :
180
- raise HTTPException (status_code = 400 , detail = "User not found" )
192
+ raise HTTPException (status_code = 400 , detail = USER_NOT_FOUND )
181
193
await db_session .delete (db_user )
182
194
await db_session .commit ()
183
195
return UsersDeleteUserResponse (ok = True )
@@ -208,7 +220,7 @@ async def rotate_user_token(
208
220
result = await db_session .exec (select (User ).where (User .name == req .name ))
209
221
db_user = result .first ()
210
222
if not db_user :
211
- raise HTTPException (status_code = 400 , detail = "User not found" )
223
+ raise HTTPException (status_code = 400 , detail = USER_NOT_FOUND )
212
224
if current_user .name != db_user .name and not current_user .is_admin :
213
225
raise HTTPException (status_code = 403 , detail = "Not authorized" )
214
226
token = new_token ()
0 commit comments