diff --git a/src/medical_info/db/schemas/medical_card.py b/src/medical_info/db/schemas/medical_card.py index bf3d032..19f2777 100644 --- a/src/medical_info/db/schemas/medical_card.py +++ b/src/medical_info/db/schemas/medical_card.py @@ -1,29 +1,13 @@ from pydantic import BaseModel -from pydantic.types import UUID4, Json -from typing import List, Optional, Any +from pydantic.types import UUID4 +from typing import Optional from datetime import date, datetime from .persons import PersonOut -class MedicalCardResponse(BaseModel): - id: UUID4 - number: Optional[str] - person_id: UUID4 - person: PersonOut - created_at: Optional[datetime] - - - -class MedicalCardCreate(BaseModel): +class MedicalCardCreateIn(BaseModel): number: str person_id: UUID4 -class MedicalCardBase(BaseModel): - id: UUID4 - - class Config: - orm_mode = True - - class MedicalCardDetailOut(BaseModel): id: UUID4 number: str @@ -33,30 +17,8 @@ class MedicalCardDetailOut(BaseModel): class Config: orm_mode = True -class MedicalCardSimple(BaseModel): - id: UUID4 - number: Optional[str] - person_id: UUID4 - created_at: Optional[datetime] - class Config: - orm_mode = True - -class MedicalCard(BaseModel): - id: UUID4 +class MedicalCardUpdateIn(BaseModel): number: str - created_at: datetime - person_id: UUID4 - class Config: - orm_mode = True - -class MedicalCardUpdateRq(BaseModel): - number: str | None - -class MedicalCardUpdateRs(BaseModel): - id: UUID4 - number: str - created_at: datetime - person_id: UUID4 class Config: orm_mode = True @@ -66,5 +28,13 @@ class MedicalCardOut(BaseModel): created_at: datetime person_id: UUID4 person: Optional[PersonOut] + class Config: + orm_mode = True + +class MedicalCardShortOut(BaseModel): + id: UUID4 + number: str + created_at: datetime + person_id: UUID4 class Config: orm_mode = True \ 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 6cb2404..20420ae 100644 --- a/src/medical_info/routers/medical_cards.py +++ b/src/medical_info/routers/medical_cards.py @@ -2,11 +2,14 @@ from fastapi import Depends from fastapi.routing import APIRouter from typing import List, Optional from pydantic.types import UUID4 -from medical_info.db import models, schemas +from medical_info.db import models from medical_info.db.schemas import ( MedicalCardOut, MedicalCardDetailOut, - MedicalCardResponse, MedicalCardCreate, MedicalCardBase, MedicalCardUpdateRq) + MedicalCardCreateIn, + MedicalCardUpdateIn, + MedicalCardShortOut +) from medical_info.services import MedicalCardService, get_medical_cards_service router = APIRouter(prefix='/medical_cards') @@ -24,16 +27,16 @@ async def get_medical_card( ) -> Optional[MedicalCardDetailOut]: return medical_cards_service.get(medical_card_id) -@router.post('/', status_code=201, response_model=schemas.MedicalCardBase) +@router.post('/', status_code=201, response_model=MedicalCardShortOut) async def create_medical_card( - medical_card: MedicalCardCreate, medical_cards_service: MedicalCardService = Depends(get_medical_cards_service) + medical_card: MedicalCardCreateIn, medical_cards_service: MedicalCardService = Depends(get_medical_cards_service) ) -> models.MedicalCard: return medical_cards_service.create(medical_card) -@router.patch('/{medical_card_id}', response_model=schemas.MedicalCardUpdateRs) +@router.patch('/{medical_card_id}', response_model=MedicalCardUpdateIn) async def update_medical_card( medical_card_id: UUID4, - medical_card: MedicalCardUpdateRq, + medical_card: MedicalCardUpdateIn, medical_cards_service: MedicalCardService = Depends(get_medical_cards_service) ) -> Optional[models.MedicalCard]: return medical_cards_service.update(medical_card_id, medical_card) diff --git a/src/medical_info/services/medical_cards.py b/src/medical_info/services/medical_cards.py index 2cc027e..07c7fff 100644 --- a/src/medical_info/services/medical_cards.py +++ b/src/medical_info/services/medical_cards.py @@ -1,22 +1,23 @@ from typing import Any, List, Optional -from medical_info.db.models import MedicalCard from medical_info.db.schemas import ( PersonOut, MedicalCardOut, MedicalCardDetailOut, - MedicalCardCreate, MedicalCardBase, MedicalCardResponse) + MedicalCardCreateIn, + MedicalCardUpdateIn +) from medical_info.services.base import BaseService from sqlalchemy.orm import Session from pydantic import parse_obj_as from pydantic.types import UUID4 -from medical_info.db import schemas, models +from medical_info.db import models from starlette.exceptions import HTTPException import os import httpx -class MedicalCardService(BaseService[MedicalCard, MedicalCardCreate, Any]): +class MedicalCardService(BaseService[models.MedicalCard, MedicalCardCreateIn, Any]): def __init__(self, db_session: Session): - super(MedicalCardService, self).__init__(MedicalCard, db_session) + super(MedicalCardService, self).__init__(models.MedicalCard, db_session) LOCAL_PERSONAL_INFO_URL = 'http://localhost:8001/persons' self.PERSONAL_INFO_URL = os.environ.get('ASTRA-PESONAL-INFORMATION') or LOCAL_PERSONAL_INFO_URL @@ -46,7 +47,7 @@ class MedicalCardService(BaseService[MedicalCard, MedicalCardCreate, Any]): return parse_obj_as(PersonOut, response.json()) - def list(self, searchstring: str) -> Any: + def list(self, searchstring: str) -> List[MedicalCardOut]: if searchstring is None or searchstring == '': raise HTTPException(status_code=409, detail='searchstring is required') @@ -76,7 +77,7 @@ class MedicalCardService(BaseService[MedicalCard, MedicalCardCreate, Any]): return medical_card - def update(self, id: UUID4, mc_request: schemas.MedicalCardUpdateRq) -> Optional[MedicalCard]: + def update(self, id: UUID4, mc_request: MedicalCardUpdateIn) -> Optional[MedicalCardOut]: mc_obj = self.db_session.get(self.model, id) if mc_obj is None: raise HTTPException(status_code=404, detail='NotFound')