изменил метод получения выдач линз, добавил в ответ информацию о пациентах, докторах и линзах, сделал сортировку по дате

This commit is contained in:
Андрей Дувакин 2025-03-02 20:15:37 +05:00
parent fe67771924
commit 321dfd5628
4 changed files with 56 additions and 4 deletions

View File

@ -2,6 +2,7 @@ from typing import Optional, Sequence
from sqlalchemy import select from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.orm import joinedload
from app.domain.models import LensIssue from app.domain.models import LensIssue
@ -11,7 +12,13 @@ class LensIssuesRepository:
self.db = db self.db = db
async def get_all(self) -> Sequence[LensIssue]: 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) result = await self.db.execute(stmt)
return result.scalars().all() return result.scalars().all()

View File

@ -3,6 +3,10 @@ from typing import Optional
from pydantic import BaseModel 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): class LensIssueEntity(BaseModel):
id: Optional[int] = None id: Optional[int] = None
@ -11,3 +15,7 @@ class LensIssueEntity(BaseModel):
patient_id: int patient_id: int
doctor_id: Optional[int] = None doctor_id: Optional[int] = None
lens_id: int lens_id: int
patient: Optional[PatientEntity] = None
doctor: Optional[UserEntity] = None
lens: Optional[LensEntity] = None

View File

@ -1,5 +1,3 @@
from typing import Optional
from fastapi import HTTPException from fastapi import HTTPException
from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.ext.asyncio import AsyncSession
from starlette import status from starlette import status
@ -10,6 +8,9 @@ from app.application.patients_repository import PatientsRepository
from app.application.users_repository import UsersRepository from app.application.users_repository import UsersRepository
from app.domain.entities.lens_issues import LensIssueEntity from app.domain.entities.lens_issues import LensIssueEntity
from app.domain.models import LensIssue 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: class LensIssuesService:
@ -76,10 +77,21 @@ class LensIssuesService:
@staticmethod @staticmethod
def model_to_entity(lens_issue_model: LensIssue) -> LensIssueEntity: def model_to_entity(lens_issue_model: LensIssue) -> LensIssueEntity:
return LensIssueEntity( lens_issue_entity = LensIssueEntity(
id=lens_issue_model.id, id=lens_issue_model.id,
issue_date=lens_issue_model.issue_date, issue_date=lens_issue_model.issue_date,
patient_id=lens_issue_model.patient_id, patient_id=lens_issue_model.patient_id,
doctor_id=lens_issue_model.doctor_id, doctor_id=lens_issue_model.doctor_id,
lens_id=lens_issue_model.lens_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

View File

@ -74,3 +74,28 @@ class UsersService:
return False return False
return True 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,
)