diff --git a/api/app/application/users_repository.py b/api/app/application/users_repository.py index ccf3115..2a3ea4e 100644 --- a/api/app/application/users_repository.py +++ b/api/app/application/users_repository.py @@ -17,7 +17,11 @@ class UsersRepository: return result.scalars().all() async def get_by_id(self, user_id: int) -> Optional[User]: - stmt = select(User).filter_by(id=user_id) + stmt = ( + select(User) + .filter_by(id=user_id) + .options(joinedload(User.role)) + ) result = await self.db.execute(stmt) return result.scalars().first() diff --git a/api/app/domain/entities/role.py b/api/app/domain/entities/role.py new file mode 100644 index 0000000..ed67ceb --- /dev/null +++ b/api/app/domain/entities/role.py @@ -0,0 +1,8 @@ +from typing import Optional + +from pydantic import BaseModel + + +class RoleEntity(BaseModel): + id: Optional[int] = None + title: str diff --git a/api/app/domain/entities/user.py b/api/app/domain/entities/user.py index 0bd7e15..bdabc64 100644 --- a/api/app/domain/entities/user.py +++ b/api/app/domain/entities/user.py @@ -2,6 +2,8 @@ from typing import Optional from pydantic import BaseModel +from app.domain.entities.role import RoleEntity + class UserEntity(BaseModel): id: Optional[int] = None @@ -11,3 +13,5 @@ class UserEntity(BaseModel): login: str role_id: Optional[int] = None + + role: Optional[RoleEntity] = None diff --git a/api/app/infrastructure/users_service.py b/api/app/infrastructure/users_service.py index 8aeae32..e9df64b 100644 --- a/api/app/infrastructure/users_service.py +++ b/api/app/infrastructure/users_service.py @@ -8,8 +8,9 @@ from app.application.roles_repository import RolesRepository from app.application.users_repository import UsersRepository from app.domain.entities.change_password import ChangePasswordEntity from app.domain.entities.register import RegisterEntity +from app.domain.entities.role import RoleEntity from app.domain.entities.user import UserEntity -from app.domain.models import User +from app.domain.models import User, Role class UsersService: @@ -25,7 +26,10 @@ class UsersService: detail='User was not found', ) - return self.model_to_entity(user) + user_entity = self.model_to_entity(user) + user_entity.role = self.role_model_to_entity(user.role) + + return user_entity async def change_password(self, data: ChangePasswordEntity, current_user_id: int) -> Optional[UserEntity]: user = await self.users_repository.get_by_id(data.user_id) @@ -136,6 +140,13 @@ class UsersService: return self.model_to_entity(user_model) + @staticmethod + def role_model_to_entity(role: Role) -> RoleEntity: + return RoleEntity( + id=role.id, + title=role.title, + ) + @staticmethod def is_strong_password(password: str) -> bool: if len(password) < 8: