75 lines
2.3 KiB
Python
75 lines
2.3 KiB
Python
from fastapi import APIRouter, Depends, Query
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from app.database.session import get_db
|
|
from app.domain.entities.patient import PatientEntity
|
|
from app.domain.entities.responses.paginated_patient import PaginatedPatientsResponseEntity
|
|
from app.infrastructure.dependencies import get_current_user
|
|
from app.infrastructure.patients_service import PatientsService
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get(
|
|
"/",
|
|
response_model=PaginatedPatientsResponseEntity,
|
|
summary="Get all patients with pagination",
|
|
description="Returns a paginated list of patients and total count",
|
|
)
|
|
async def get_all_patients(
|
|
page: int = Query(1, ge=1, description="Page number"),
|
|
page_size: int = Query(10, ge=1, le=100, description="Number of patients per page"),
|
|
search: str = Query(None, description="Search term for filtering patients"),
|
|
db: AsyncSession = Depends(get_db),
|
|
user=Depends(get_current_user),
|
|
):
|
|
patients_service = PatientsService(db)
|
|
patients, total_count = await patients_service.get_all_patients(page, page_size, search)
|
|
return {"patients": patients, "total_count": total_count}
|
|
|
|
|
|
@router.post(
|
|
"/",
|
|
response_model=PatientEntity,
|
|
summary="Create a new patient",
|
|
description="Creates a new patient",
|
|
)
|
|
async def create_patient(
|
|
patient: PatientEntity,
|
|
db: AsyncSession = Depends(get_db),
|
|
user=Depends(get_current_user),
|
|
):
|
|
patients_service = PatientsService(db)
|
|
return await patients_service.create_patient(patient)
|
|
|
|
|
|
@router.put(
|
|
"/{patient_id}/",
|
|
response_model=PatientEntity,
|
|
summary="Update a patient",
|
|
description="Updates a patient",
|
|
)
|
|
async def update_patient(
|
|
patient_id: int,
|
|
patient: PatientEntity,
|
|
db: AsyncSession = Depends(get_db),
|
|
user=Depends(get_current_user),
|
|
):
|
|
patients_service = PatientsService(db)
|
|
return await patients_service.update_patient(patient_id, patient)
|
|
|
|
|
|
@router.delete(
|
|
"/{patient_id}/",
|
|
response_model=PatientEntity,
|
|
summary="Delete a patient",
|
|
description="Deletes a patient",
|
|
)
|
|
async def delete_patient(
|
|
patient_id: int,
|
|
db: AsyncSession = Depends(get_db),
|
|
user=Depends(get_current_user),
|
|
):
|
|
patient_service = PatientsService(db)
|
|
return await patient_service.delete_patient(patient_id)
|