visus-plus/api/app/controllers/patients_router.py
andrei 7a2ef98fd5 feat: IssuesPage
Добавлены фильтрация, пагинация и поиск.
Улучшен UI.
Удален useIssuesUI.js.
Добавлен PaginatedLensIssuesResponseEntity.
2025-06-08 10:14:41 +05:00

79 lines
2.6 KiB
Python

from typing import Literal
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"),
sort_order: Literal["asc", "desc"] = Query("asc", description="Sort order by first_name (asc or desc)"),
all_params: bool = Query(False, description="Get all 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, sort_order, all_params)
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)