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

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.lenses_router import router as lenses_router
from app.controllers.patients_router import router as patients_router from app.controllers.patients_router import router as patients_router
from app.controllers.register_routes import router as register_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.scheduled_appointments_router import router as scheduled_appointments_router
from app.controllers.set_content_router import router as set_content_router from app.controllers.set_content_router import router as set_content_router
from app.controllers.sets_router import router as sets_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(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(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(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(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(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']) api_app.include_router(sets_router, prefix=f'{settings.APP_PREFIX}/sets', tags=['sets'])