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() return result.scalars().all()
async def get_by_id(self, user_id: int) -> Optional[User]: 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) result = await self.db.execute(stmt)
return result.scalars().first() 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 pydantic import BaseModel
from app.domain.entities.role import RoleEntity
class UserEntity(BaseModel): class UserEntity(BaseModel):
id: Optional[int] = None id: Optional[int] = None
@ -11,3 +13,5 @@ class UserEntity(BaseModel):
login: str login: str
role_id: Optional[int] = None 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.application.users_repository import UsersRepository
from app.domain.entities.change_password import ChangePasswordEntity from app.domain.entities.change_password import ChangePasswordEntity
from app.domain.entities.register import RegisterEntity from app.domain.entities.register import RegisterEntity
from app.domain.entities.role import RoleEntity
from app.domain.entities.user import UserEntity from app.domain.entities.user import UserEntity
from app.domain.models import User from app.domain.models import User, Role
class UsersService: class UsersService:
@ -25,7 +26,10 @@ class UsersService:
detail='User was not found', 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]: async def change_password(self, data: ChangePasswordEntity, current_user_id: int) -> Optional[UserEntity]:
user = await self.users_repository.get_by_id(data.user_id) user = await self.users_repository.get_by_id(data.user_id)
@ -136,6 +140,13 @@ class UsersService:
return self.model_to_entity(user_model) 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 @staticmethod
def is_strong_password(password: str) -> bool: def is_strong_password(password: str) -> bool:
if len(password) < 8: if len(password) < 8: