From b581ffd00358e461e2843559cd05c533c55e7f32 Mon Sep 17 00:00:00 2001 From: andrei Date: Mon, 2 Jun 2025 22:16:50 +0500 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=A0=D0=BE=D0=BB=D0=B8.=20=D0=94?= =?UTF-8?q?=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D1=8B=20RolesService?= =?UTF-8?q?=20=D0=B8=20RolesRouter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/app/controllers/roles_router.py | 23 +++++++++++++++++++++++ api/app/infrastructure/roles_service.py | 24 ++++++++++++++++++++++++ api/app/infrastructure/users_service.py | 15 ++++----------- api/app/main.py | 2 ++ 4 files changed, 53 insertions(+), 11 deletions(-) create mode 100644 api/app/controllers/roles_router.py create mode 100644 api/app/infrastructure/roles_service.py diff --git a/api/app/controllers/roles_router.py b/api/app/controllers/roles_router.py new file mode 100644 index 0000000..cd3fb18 --- /dev/null +++ b/api/app/controllers/roles_router.py @@ -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() diff --git a/api/app/infrastructure/roles_service.py b/api/app/infrastructure/roles_service.py new file mode 100644 index 0000000..3096d79 --- /dev/null +++ b/api/app/infrastructure/roles_service.py @@ -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, + ) diff --git a/api/app/infrastructure/users_service.py b/api/app/infrastructure/users_service.py index 78594a4..69fb9dd 100644 --- a/api/app/infrastructure/users_service.py +++ b/api/app/infrastructure/users_service.py @@ -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: diff --git a/api/app/main.py b/api/app/main.py index 41f4d50..4168876 100644 --- a/api/app/main.py +++ b/api/app/main.py @@ -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'])