diff --git a/api/app/application/users_repository.py b/api/app/application/users_repository.py index 2a3ea4e..ed66f4d 100644 --- a/api/app/application/users_repository.py +++ b/api/app/application/users_repository.py @@ -12,7 +12,10 @@ class UsersRepository: self.db = db async def get_all(self) -> Sequence[User]: - stmt = select(User) + stmt = ( + select(User) + .options(joinedload(User.role)) + ) result = await self.db.execute(stmt) return result.scalars().all() diff --git a/api/app/controllers/users_router.py b/api/app/controllers/users_router.py index d9789bc..76066b2 100644 --- a/api/app/controllers/users_router.py +++ b/api/app/controllers/users_router.py @@ -6,12 +6,26 @@ from sqlalchemy.ext.asyncio import AsyncSession from app.database.session import get_db from app.domain.entities.change_password import ChangePasswordEntity from app.domain.entities.user import UserEntity -from app.infrastructure.dependencies import get_current_user +from app.infrastructure.dependencies import get_current_user, require_admin from app.infrastructure.users_service import UsersService router = APIRouter() +@router.get( + '/', + response_model=list[UserEntity], + summary='Return all users', + description='Returns a list of all users', +) +async def get_authenticated_user_data( + db: AsyncSession = Depends(get_db), + user=Depends(require_admin), +): + users_service = UsersService(db) + return await users_service.get_all_users() + + @router.get( '/my-data/', response_model=Optional[UserEntity], diff --git a/api/app/infrastructure/users_service.py b/api/app/infrastructure/users_service.py index e9df64b..78594a4 100644 --- a/api/app/infrastructure/users_service.py +++ b/api/app/infrastructure/users_service.py @@ -31,6 +31,17 @@ class UsersService: return user_entity + async def get_all_users(self) -> list[UserEntity]: + users = await self.users_repository.get_all() + response = [] + + for user in users: + user_entity = self.model_to_entity(user) + user_entity.role = self.role_model_to_entity(user.role) + response.append(user_entity) + + return response + async def change_password(self, data: ChangePasswordEntity, current_user_id: int) -> Optional[UserEntity]: user = await self.users_repository.get_by_id(data.user_id) if not user: