From 321dfd5628a0385bb0db936f234b16c440370ef3 Mon Sep 17 00:00:00 2001 From: andrei Date: Sun, 2 Mar 2025 20:15:37 +0500 Subject: [PATCH] =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=20=D0=BF=D0=BE=D0=BB=D1=83=D1=87?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B2=D1=8B=D0=B4=D0=B0=D1=87=20?= =?UTF-8?q?=D0=BB=D0=B8=D0=BD=D0=B7,=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=B2=20=D0=BE=D1=82=D0=B2=D0=B5=D1=82=20=D0=B8?= =?UTF-8?q?=D0=BD=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=86=D0=B8=D1=8E=20=D0=BE?= =?UTF-8?q?=20=D0=BF=D0=B0=D1=86=D0=B8=D0=B5=D0=BD=D1=82=D0=B0=D1=85,=20?= =?UTF-8?q?=D0=B4=D0=BE=D0=BA=D1=82=D0=BE=D1=80=D0=B0=D1=85=20=D0=B8=20?= =?UTF-8?q?=D0=BB=D0=B8=D0=BD=D0=B7=D0=B0=D1=85,=20=D1=81=D0=B4=D0=B5?= =?UTF-8?q?=D0=BB=D0=B0=D0=BB=20=D1=81=D0=BE=D1=80=D1=82=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=BA=D1=83=20=D0=BF=D0=BE=20=D0=B4=D0=B0=D1=82=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/app/application/lens_issues_repository.py | 9 ++++++- api/app/domain/entities/lens_issues.py | 8 ++++++ api/app/infrastructure/lens_issues_service.py | 18 ++++++++++--- api/app/infrastructure/users_service.py | 25 +++++++++++++++++++ 4 files changed, 56 insertions(+), 4 deletions(-) diff --git a/api/app/application/lens_issues_repository.py b/api/app/application/lens_issues_repository.py index 5948297..8234951 100644 --- a/api/app/application/lens_issues_repository.py +++ b/api/app/application/lens_issues_repository.py @@ -2,6 +2,7 @@ from typing import Optional, Sequence from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession +from sqlalchemy.orm import joinedload from app.domain.models import LensIssue @@ -11,7 +12,13 @@ class LensIssuesRepository: self.db = db async def get_all(self) -> Sequence[LensIssue]: - stmt = select(LensIssue) + stmt = ( + select(LensIssue) + .options(joinedload(LensIssue.lens)) + .options(joinedload(LensIssue.patient)) + .options(joinedload(LensIssue.doctor)) + .order_by(LensIssue.issue_date) + ) result = await self.db.execute(stmt) return result.scalars().all() diff --git a/api/app/domain/entities/lens_issues.py b/api/app/domain/entities/lens_issues.py index bcb1819..d48b7e9 100644 --- a/api/app/domain/entities/lens_issues.py +++ b/api/app/domain/entities/lens_issues.py @@ -3,6 +3,10 @@ from typing import Optional from pydantic import BaseModel +from app.domain.entities.lens import LensEntity +from app.domain.entities.patient import PatientEntity +from app.domain.entities.user import UserEntity + class LensIssueEntity(BaseModel): id: Optional[int] = None @@ -11,3 +15,7 @@ class LensIssueEntity(BaseModel): patient_id: int doctor_id: Optional[int] = None lens_id: int + + patient: Optional[PatientEntity] = None + doctor: Optional[UserEntity] = None + lens: Optional[LensEntity] = None diff --git a/api/app/infrastructure/lens_issues_service.py b/api/app/infrastructure/lens_issues_service.py index 6174f5e..e209377 100644 --- a/api/app/infrastructure/lens_issues_service.py +++ b/api/app/infrastructure/lens_issues_service.py @@ -1,5 +1,3 @@ -from typing import Optional - from fastapi import HTTPException from sqlalchemy.ext.asyncio import AsyncSession from starlette import status @@ -10,6 +8,9 @@ from app.application.patients_repository import PatientsRepository from app.application.users_repository import UsersRepository from app.domain.entities.lens_issues import LensIssueEntity from app.domain.models import LensIssue +from app.infrastructure.lenses_service import LensesService +from app.infrastructure.patients_service import PatientsService +from app.infrastructure.users_service import UsersService class LensIssuesService: @@ -76,10 +77,21 @@ class LensIssuesService: @staticmethod def model_to_entity(lens_issue_model: LensIssue) -> LensIssueEntity: - return LensIssueEntity( + lens_issue_entity = LensIssueEntity( id=lens_issue_model.id, issue_date=lens_issue_model.issue_date, patient_id=lens_issue_model.patient_id, doctor_id=lens_issue_model.doctor_id, lens_id=lens_issue_model.lens_id, ) + + if lens_issue_model.doctor is not None: + lens_issue_entity.doctor = UsersService.model_to_entity(lens_issue_model.doctor) + + if lens_issue_model.patient is not None: + lens_issue_entity.patient = PatientsService.model_to_entity(lens_issue_model.patient) + + if lens_issue_model.lens is not None: + lens_issue_entity.lens = LensesService.model_to_entity(lens_issue_model.lens) + + return lens_issue_entity diff --git a/api/app/infrastructure/users_service.py b/api/app/infrastructure/users_service.py index 0bd1fda..ab7b20c 100644 --- a/api/app/infrastructure/users_service.py +++ b/api/app/infrastructure/users_service.py @@ -74,3 +74,28 @@ class UsersService: return False return True + + @staticmethod + def entity_to_model(user: UserEntity) -> User: + user_model = User( + first_name=user.first_name, + last_name=user.last_name, + patronymic=user.patronymic, + login=user.login, + ) + + if user.id is not None: + user_model.id = user.id + + return user_model + + @staticmethod + def model_to_entity(user: User) -> UserEntity: + return UserEntity( + id=user.id, + first_name=user.first_name, + last_name=user.last_name, + patronymic=user.patronymic, + login=user.login, + role_id=user.role_id, + )