feat: Добавлена сущность Role и связь User-Role

This commit is contained in:
Андрей Дувакин 2025-06-02 21:17:11 +05:00
parent fda45296a4
commit e8b71a0c37
4 changed files with 30 additions and 3 deletions

View File

@ -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()

View File

@ -0,0 +1,8 @@
from typing import Optional
from pydantic import BaseModel
class RoleEntity(BaseModel):
id: Optional[int] = None
title: str

View File

@ -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

View File

@ -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: