сделал репозиторий и сервис в АПИ для пациентов

This commit is contained in:
Андрей Дувакин 2025-02-09 12:20:30 +05:00
parent 17c4c69ec2
commit 0a9cc6bf4e
7 changed files with 149 additions and 3 deletions

View File

@ -0,0 +1,42 @@
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from app.domain.models import Patient
class PatientsRepository:
def __init__(self, db: AsyncSession):
self.db = db
async def get_all(self):
stmt = select(Patient)
result = await self.db.execute(stmt)
return result.scalars().all()
async def get_by_id(self, patient_id: int):
stmt = select(Patient).filter(Patient.id == patient_id)
result = await self.db.execute(stmt)
return result.scalars().first()
async def create(self, patient: Patient):
self.db.add(patient)
await self.db.commit()
await self.db.refresh(patient)
return patient
async def update(self, patient: Patient):
await self.db.merge(patient)
await self.db.commit()
return patient
async def delete(self, patient_id: int):
stmt = select(Patient).filter(Patient.id == patient_id)
result = await self.db.execute(stmt)
patient = result.scalars().first()
if patient:
await self.db.delete(patient)
await self.db.commit()
return patient
return None

View File

@ -32,5 +32,4 @@ class UsersRepository:
self.db.add(user)
await self.db.commit()
await self.db.refresh(user)
return user

View File

@ -0,0 +1,16 @@
from typing import Optional
from pydantic import BaseModel
class PatientEntity(BaseModel):
id: Optional[int]
first_name: str
last_name: str
patronymic: Optional[str]
birthday: str
address: Optional[str]
email: Optional[str]
phone: Optional[str]
diagnosis: Optional[str]
correction: Optional[str]

View File

@ -1,6 +1,6 @@
from typing import Optional
from pydantic import BaseModel, Field
from pydantic import BaseModel
class RegisterEntity(BaseModel):

View File

@ -1,6 +1,6 @@
from typing import Optional
from pydantic import BaseModel, Field
from pydantic import BaseModel
class UserEntity(BaseModel):

View File

@ -0,0 +1,84 @@
from typing import Optional
from sqlalchemy.ext.asyncio import AsyncSession
from app.application.patients_repository import PatientsRepository
from app.domain.entities.patient import PatientEntity
from app.domain.models import Patient
class PatientService:
def __init__(self, db: AsyncSession):
self.patient_repository = PatientsRepository(db)
async def get_all_patients(self) -> list[PatientEntity]:
patients = await self.patient_repository.get_all()
return [
PatientEntity(
id=patient.id,
first_name=patient.first_name,
last_name=patient.last_name,
patronymic=patient.patronymic,
birthday=patient.birthday,
address=patient.address,
email=patient.email,
phone=patient.phone,
diagnosis=patient.diagnosis,
correction=patient.correction,
)
for patient in patients
]
async def create_patient(self, patient: PatientEntity) -> PatientEntity:
patient_model = Patient(
first_name=patient.first_name,
last_name=patient.last_name,
patronymic=patient.patronymic,
birthday=patient.birthday,
address=patient.address,
email=patient.email,
phone=patient.phone,
diagnosis=patient.diagnosis,
correction=patient.correction,
)
await self.patient_repository.create(patient_model)
return PatientEntity(
id=patient_model.id,
first_name=patient_model.first_name,
last_name=patient_model.last_name,
patronymic=patient_model.patronymic,
birthday=patient_model.birthday,
address=patient_model.address,
email=patient_model.email,
phone=patient_model.phone,
diagnosis=patient_model.diagnosis,
correction=patient_model.correction,
)
async def update_patient(self, user_id: int, patient: PatientEntity) -> Optional[PatientEntity]:
patient_model = await self.patient_repository.get_by_id(user_id)
if patient_model:
patient_model.first_name = patient.first_name
patient_model.last_name = patient.last_name
patient_model.patronymic = patient.patronymic
patient_model.birthday = patient.birthday
patient_model.address = patient.address
patient_model.email = patient.email
patient_model.phone = patient.phone
patient_model.diagnosis = patient.diagnosis
patient_model.correction = patient.correction
await self.patient_repository.update(patient_model)
return PatientEntity(
id=patient_model.id,
first_name=patient_model.first_name,
last_name=patient_model.last_name,
patronymic=patient_model.patronymic,
birthday=patient_model.birthday,
address=patient_model.address,
email=patient_model.email,
phone=patient_model.phone,
diagnosis=patient_model.diagnosis,
correction=patient_model.correction,
)
return None

View File

@ -0,0 +1,5 @@
const PatientsPage = () => {
return (
)
}