From 9c5b389849967c7641996804d3677bf63a4c261b Mon Sep 17 00:00:00 2001 From: dderbentsov Date: Sat, 22 Jul 2023 16:30:55 +0300 Subject: [PATCH] checkup draft create list --- notes.txt | 1 + src/medical_info/app.py | 3 +- src/medical_info/db/schemas/medical_card.py | 35 ++++++++++++++++++--- src/medical_info/routers/checkups.py | 21 +++++++++++++ src/medical_info/routers/medical_cards.py | 6 ++-- src/medical_info/services/__init__.py | 6 +++- src/medical_info/services/checkups.py | 9 ++++++ 7 files changed, 71 insertions(+), 10 deletions(-) create mode 100644 src/medical_info/routers/checkups.py create mode 100644 src/medical_info/services/checkups.py diff --git a/notes.txt b/notes.txt index 327febb..bdc3510 100644 --- a/notes.txt +++ b/notes.txt @@ -1,5 +1,6 @@ export PYTHONPATH='/home/dd/astra/medical_information/src' export POSTGRES_DB='medical_info_db' +docker start 9a9653ea37ca CREATE DATABASE medical_info_db; alembic revision --autogenerate -m 'initial' diff --git a/src/medical_info/app.py b/src/medical_info/app.py index d012819..f674eeb 100644 --- a/src/medical_info/app.py +++ b/src/medical_info/app.py @@ -12,8 +12,9 @@ def create_app() -> FastAPI: return 'ok' - from medical_info.routers import medical_cards + from medical_info.routers import medical_cards, checkups app.include_router(medical_cards.router) + app.include_router(checkups.router) return app \ No newline at end of file diff --git a/src/medical_info/db/schemas/medical_card.py b/src/medical_info/db/schemas/medical_card.py index 1cb20e7..c661ae8 100644 --- a/src/medical_info/db/schemas/medical_card.py +++ b/src/medical_info/db/schemas/medical_card.py @@ -1,9 +1,9 @@ from pydantic import BaseModel -from pydantic.types import UUID4 +from pydantic.types import UUID4, Json +from typing import List, Optional, Any -class MedicalCard(BaseModel): - number: str - person_id: UUID4 +class MedicalCardResponse(BaseModel): + id: UUID4 class Config: orm_mode = True @@ -11,4 +11,29 @@ class MedicalCard(BaseModel): class MedicalCardCreate(BaseModel): number: str person_id: UUID4 - \ No newline at end of file + +class CheckupDetail(BaseModel): + id: UUID4 + medical_card_id: UUID4 + medic_id: UUID4 + claims: Optional[List[str]] + allergies: Optional[List[str]] + diseases: Optional[List[str]] + medicines: Optional[List[str]] + disease_process: Optional[str] + visual_inspection: Optional[str] + dental_formula: Optional[Any] + dental_formula_ext: Optional[Json] + class Config: + orm_mode = True +class CheckupCreate(BaseModel): + medical_card_id: UUID4 + medic_id: UUID4 + claims: Optional[List[str]] + allergies: Optional[List[str]] + diseases: Optional[List[str]] + medicines: Optional[List[str]] + disease_process: Optional[str] + visual_inspection: Optional[str] + dental_formula: Optional[Any] + dental_formula_ext: Optional[Json] \ No newline at end of file diff --git a/src/medical_info/routers/checkups.py b/src/medical_info/routers/checkups.py new file mode 100644 index 0000000..7bba593 --- /dev/null +++ b/src/medical_info/routers/checkups.py @@ -0,0 +1,21 @@ +from fastapi import Depends +from fastapi.routing import APIRouter +from typing import List + +from medical_info.db import models +from medical_info.db.schemas import CheckupDetail, CheckupCreate +from medical_info.services import CheckupService, get_checkups_service + +router = APIRouter(prefix='/checkups') + +@router.get('/', response_model=List[CheckupDetail]) +def list_checkups( + checkups_service: CheckupService = Depends(get_checkups_service) +) -> List[models.Checkup]: + return checkups_service.list() + +@router.post('/', status_code=201, response_model=CheckupDetail) +async def create_checkup( + checkup: CheckupCreate, checkups_service: CheckupService = Depends(get_checkups_service) +) -> models.Checkup: + return checkups_service.create(checkup) \ No newline at end of file diff --git a/src/medical_info/routers/medical_cards.py b/src/medical_info/routers/medical_cards.py index b28d778..35b3df6 100644 --- a/src/medical_info/routers/medical_cards.py +++ b/src/medical_info/routers/medical_cards.py @@ -3,18 +3,18 @@ from fastapi.routing import APIRouter from typing import List from medical_info.db import models -from medical_info.db.schemas import MedicalCard, MedicalCardCreate +from medical_info.db.schemas import MedicalCardResponse, MedicalCardCreate from medical_info.services import MedicalCardService, get_medical_cards_service router = APIRouter(prefix='/medical_cards') -@router.get('/', response_model=List[MedicalCard]) +@router.get('/', response_model=List[MedicalCardResponse]) def list_medical_cards( medical_cards_service: MedicalCardService = Depends(get_medical_cards_service) ) -> List[models.MedicalCard]: return medical_cards_service.list() -@router.post('/', status_code=201, response_model=MedicalCard) +@router.post('/', status_code=201, response_model=MedicalCardResponse) async def create_medical_card( medical_card: MedicalCardCreate, medical_cards_service: MedicalCardService = Depends(get_medical_cards_service) ) -> models.MedicalCard: diff --git a/src/medical_info/services/__init__.py b/src/medical_info/services/__init__.py index f61e5a9..eee2cd9 100644 --- a/src/medical_info/services/__init__.py +++ b/src/medical_info/services/__init__.py @@ -4,8 +4,12 @@ from sqlalchemy.orm import Session from medical_info.db.session import get_session from .medical_cards import MedicalCardService +from .checkups import CheckupService def get_medical_cards_service(db_session: Session = Depends(get_session)) -> MedicalCardService: return MedicalCardService(db_session) -__all__ = ('get_medical_cards_service') \ No newline at end of file +def get_checkups_service(db_session: Session = Depends(get_session)) -> CheckupService: + return CheckupService(db_session) + +__all__ = ('get_medical_cards_service', 'get_checkups_service') \ No newline at end of file diff --git a/src/medical_info/services/checkups.py b/src/medical_info/services/checkups.py new file mode 100644 index 0000000..ceed807 --- /dev/null +++ b/src/medical_info/services/checkups.py @@ -0,0 +1,9 @@ +from typing import Any +from medical_info.db.models import Checkup +from medical_info.db.schemas import CheckupCreate +from medical_info.services.base import BaseService +from sqlalchemy.orm import Session + +class CheckupService(BaseService[Checkup, CheckupCreate, Any]): + def __init__(self, db_session: Session): + super(CheckupService, self).__init__(Checkup, db_session)