diff --git a/src/api/v1/users.py b/src/api/v1/users.py index fe9de56..3480a54 100644 --- a/src/api/v1/users.py +++ b/src/api/v1/users.py @@ -17,3 +17,9 @@ async def get_me(user: ActiveUser): async def get_all_users(db: sessionDep, user: AdminUser): users = await UserService(db).get_all_users() return users + + +@router.get("/{id}") +async def get_user_by_id(db: sessionDep, id: int, user: AdminUser): + user = await UserService(db).get_user_by_filter_or_raise(id=id) + return user \ No newline at end of file diff --git a/src/schemas/auth.py b/src/schemas/auth.py index eab7a8b..41f19d8 100644 --- a/src/schemas/auth.py +++ b/src/schemas/auth.py @@ -7,5 +7,6 @@ class Token(BaseModel): class TokenData(BaseModel): + id: int | None = None sub: str | None = None is_active: bool diff --git a/src/services/auth.py b/src/services/auth.py index 0a09ccc..5e805dc 100644 --- a/src/services/auth.py +++ b/src/services/auth.py @@ -35,6 +35,6 @@ class AuthService(BaseService): detail="Incorrect username or password", ) access_token = AuthManager.create_access_token( - data={"sub": user.username, "is_active": user.is_active} + data={"id": user.id, "sub": user.username, "is_active": user.is_active} ) return Token(access_token=access_token, token_type="bearer") diff --git a/src/services/users.py b/src/services/users.py index c7e5164..5603371 100644 --- a/src/services/users.py +++ b/src/services/users.py @@ -5,20 +5,20 @@ from src.services.base import BaseService class UserService(BaseService): - async def get_user_by_username(self, username: str) -> User | None: - result = await self.session.user.get_one_or_none(username=username) + async def get_user_by_filter(self, **filter_by) -> User | None: + result = await self.session.user.get_one_or_none(**filter_by) if result is None: return None return User.model_validate(result) - async def get_user_by_username_or_raise(self, username: str) -> User: - user = await self.get_user_by_username(username) + async def get_user_by_filter_or_raise(self, **filter_by) -> User: + user = await self.get_user_by_filter(**filter_by) if user is None: raise HTTPException(status_code=404, detail="User not found") return user async def validate_admin_user(self, username: str) -> User: - user = await self.get_user_by_username_or_raise(username) + user = await self.get_user_by_filter_or_raise(username=username) if not user.is_superuser: raise HTTPException(status_code=403, detail="Admin access required") return user