сделал репозиторий и сервис в АПИ для пациентов
This commit is contained in:
parent
17c4c69ec2
commit
0a9cc6bf4e
42
api/app/application/patients_repository.py
Normal file
42
api/app/application/patients_repository.py
Normal 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
|
||||
@ -32,5 +32,4 @@ class UsersRepository:
|
||||
self.db.add(user)
|
||||
await self.db.commit()
|
||||
await self.db.refresh(user)
|
||||
|
||||
return user
|
||||
|
||||
16
api/app/domain/entities/patient.py
Normal file
16
api/app/domain/entities/patient.py
Normal 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]
|
||||
@ -1,6 +1,6 @@
|
||||
from typing import Optional
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
||||
class RegisterEntity(BaseModel):
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
from typing import Optional
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
||||
class UserEntity(BaseModel):
|
||||
|
||||
84
api/app/infrastructure/patient_service.py
Normal file
84
api/app/infrastructure/patient_service.py
Normal 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
|
||||
5
web-app/src/pages/PatientsPage.jsx
Normal file
5
web-app/src/pages/PatientsPage.jsx
Normal file
@ -0,0 +1,5 @@
|
||||
const PatientsPage = () => {
|
||||
|
||||
return (
|
||||
)
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user