feat: Роли. Добавлены RolesService и RolesRouter

This commit is contained in:
Андрей Дувакин 2025-06-02 22:16:50 +05:00
parent 7cb2b21227
commit b581ffd003
4 changed files with 53 additions and 11 deletions

View File

@ -0,0 +1,23 @@
from fastapi import APIRouter, Depends
from sqlalchemy.ext.asyncio import AsyncSession
from app.database.session import get_db
from app.domain.entities.role import RoleEntity
from app.infrastructure.dependencies import require_admin
from app.infrastructure.roles_service import RolesService
router = APIRouter()
@router.get(
'/',
response_model=list[RoleEntity],
summary='Return all roles',
description='Return all roles',
)
async def get_all_roles(
db: AsyncSession = Depends(get_db),
user=Depends(require_admin),
):
roles_service = RolesService(db)
return await roles_service.get_all_roles()

View File

@ -0,0 +1,24 @@
from sqlalchemy.ext.asyncio import AsyncSession
from app.application.roles_repository import RolesRepository
from app.domain.entities.role import RoleEntity
from app.domain.models import Role
class RolesService:
def __init__(self, db: AsyncSession):
self.roles_repository = RolesRepository(db)
async def get_all_roles(self) -> list[RoleEntity]:
roles = await self.roles_repository.get_all()
return [
self.model_to_entity(role)
for role in roles
]
@staticmethod
def model_to_entity(role: Role) -> RoleEntity:
return RoleEntity(
id=role.id,
title=role.title,
)

View File

@ -8,9 +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, Role
from app.domain.models import User
from app.infrastructure.roles_service import RolesService
class UsersService:
@ -27,7 +27,7 @@ class UsersService:
)
user_entity = self.model_to_entity(user)
user_entity.role = self.role_model_to_entity(user.role)
user_entity.role = RolesService.model_to_entity(user.role)
return user_entity
@ -37,7 +37,7 @@ class UsersService:
for user in users:
user_entity = self.model_to_entity(user)
user_entity.role = self.role_model_to_entity(user.role)
user_entity.role = RolesService.model_to_entity(user.role)
response.append(user_entity)
return response
@ -151,13 +151,6 @@ 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:

View File

@ -9,6 +9,7 @@ from app.controllers.lens_types_router import router as lens_types_router
from app.controllers.lenses_router import router as lenses_router
from app.controllers.patients_router import router as patients_router
from app.controllers.register_routes import router as register_router
from app.controllers.roles_router import router as roles_router
from app.controllers.scheduled_appointments_router import router as scheduled_appointments_router
from app.controllers.set_content_router import router as set_content_router
from app.controllers.sets_router import router as sets_router
@ -35,6 +36,7 @@ def start_app():
api_app.include_router(lenses_router, prefix=f'{settings.APP_PREFIX}/lenses', tags=['lenses'])
api_app.include_router(patients_router, prefix=f'{settings.APP_PREFIX}/patients', tags=['patients'])
api_app.include_router(register_router, prefix=f'{settings.APP_PREFIX}/register', tags=['register'])
api_app.include_router(roles_router, prefix=f'{settings.APP_PREFIX}/roles', tags=['roles'])
api_app.include_router(scheduled_appointments_router, prefix=f'{settings.APP_PREFIX}/scheduled_appointments', tags=['scheduled_appointments'])
api_app.include_router(set_content_router, prefix=f'{settings.APP_PREFIX}/set_content', tags=['set_content'])
api_app.include_router(sets_router, prefix=f'{settings.APP_PREFIX}/sets', tags=['sets'])