ref CRU Medical Cards
This commit is contained in:
@@ -1,29 +1,13 @@
|
|||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
from pydantic.types import UUID4, Json
|
from pydantic.types import UUID4
|
||||||
from typing import List, Optional, Any
|
from typing import Optional
|
||||||
from datetime import date, datetime
|
from datetime import date, datetime
|
||||||
from .persons import PersonOut
|
from .persons import PersonOut
|
||||||
|
|
||||||
class MedicalCardResponse(BaseModel):
|
class MedicalCardCreateIn(BaseModel):
|
||||||
id: UUID4
|
|
||||||
number: Optional[str]
|
|
||||||
person_id: UUID4
|
|
||||||
person: PersonOut
|
|
||||||
created_at: Optional[datetime]
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class MedicalCardCreate(BaseModel):
|
|
||||||
number: str
|
number: str
|
||||||
person_id: UUID4
|
person_id: UUID4
|
||||||
|
|
||||||
class MedicalCardBase(BaseModel):
|
|
||||||
id: UUID4
|
|
||||||
|
|
||||||
class Config:
|
|
||||||
orm_mode = True
|
|
||||||
|
|
||||||
|
|
||||||
class MedicalCardDetailOut(BaseModel):
|
class MedicalCardDetailOut(BaseModel):
|
||||||
id: UUID4
|
id: UUID4
|
||||||
number: str
|
number: str
|
||||||
@@ -33,30 +17,8 @@ class MedicalCardDetailOut(BaseModel):
|
|||||||
class Config:
|
class Config:
|
||||||
orm_mode = True
|
orm_mode = True
|
||||||
|
|
||||||
class MedicalCardSimple(BaseModel):
|
class MedicalCardUpdateIn(BaseModel):
|
||||||
id: UUID4
|
|
||||||
number: Optional[str]
|
|
||||||
person_id: UUID4
|
|
||||||
created_at: Optional[datetime]
|
|
||||||
class Config:
|
|
||||||
orm_mode = True
|
|
||||||
|
|
||||||
class MedicalCard(BaseModel):
|
|
||||||
id: UUID4
|
|
||||||
number: str
|
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:
|
class Config:
|
||||||
orm_mode = True
|
orm_mode = True
|
||||||
|
|
||||||
@@ -68,3 +30,11 @@ class MedicalCardOut(BaseModel):
|
|||||||
person: Optional[PersonOut]
|
person: Optional[PersonOut]
|
||||||
class Config:
|
class Config:
|
||||||
orm_mode = True
|
orm_mode = True
|
||||||
|
|
||||||
|
class MedicalCardShortOut(BaseModel):
|
||||||
|
id: UUID4
|
||||||
|
number: str
|
||||||
|
created_at: datetime
|
||||||
|
person_id: UUID4
|
||||||
|
class Config:
|
||||||
|
orm_mode = True
|
||||||
@@ -2,11 +2,14 @@ from fastapi import Depends
|
|||||||
from fastapi.routing import APIRouter
|
from fastapi.routing import APIRouter
|
||||||
from typing import List, Optional
|
from typing import List, Optional
|
||||||
from pydantic.types import UUID4
|
from pydantic.types import UUID4
|
||||||
from medical_info.db import models, schemas
|
from medical_info.db import models
|
||||||
from medical_info.db.schemas import (
|
from medical_info.db.schemas import (
|
||||||
MedicalCardOut,
|
MedicalCardOut,
|
||||||
MedicalCardDetailOut,
|
MedicalCardDetailOut,
|
||||||
MedicalCardResponse, MedicalCardCreate, MedicalCardBase, MedicalCardUpdateRq)
|
MedicalCardCreateIn,
|
||||||
|
MedicalCardUpdateIn,
|
||||||
|
MedicalCardShortOut
|
||||||
|
)
|
||||||
from medical_info.services import MedicalCardService, get_medical_cards_service
|
from medical_info.services import MedicalCardService, get_medical_cards_service
|
||||||
|
|
||||||
router = APIRouter(prefix='/medical_cards')
|
router = APIRouter(prefix='/medical_cards')
|
||||||
@@ -24,16 +27,16 @@ async def get_medical_card(
|
|||||||
) -> Optional[MedicalCardDetailOut]:
|
) -> Optional[MedicalCardDetailOut]:
|
||||||
return medical_cards_service.get(medical_card_id)
|
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(
|
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:
|
) -> models.MedicalCard:
|
||||||
return medical_cards_service.create(medical_card)
|
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(
|
async def update_medical_card(
|
||||||
medical_card_id: UUID4,
|
medical_card_id: UUID4,
|
||||||
medical_card: MedicalCardUpdateRq,
|
medical_card: MedicalCardUpdateIn,
|
||||||
medical_cards_service: MedicalCardService = Depends(get_medical_cards_service)
|
medical_cards_service: MedicalCardService = Depends(get_medical_cards_service)
|
||||||
) -> Optional[models.MedicalCard]:
|
) -> Optional[models.MedicalCard]:
|
||||||
return medical_cards_service.update(medical_card_id, medical_card)
|
return medical_cards_service.update(medical_card_id, medical_card)
|
||||||
|
|||||||
@@ -1,22 +1,23 @@
|
|||||||
from typing import Any, List, Optional
|
from typing import Any, List, Optional
|
||||||
from medical_info.db.models import MedicalCard
|
|
||||||
from medical_info.db.schemas import (
|
from medical_info.db.schemas import (
|
||||||
PersonOut,
|
PersonOut,
|
||||||
MedicalCardOut,
|
MedicalCardOut,
|
||||||
MedicalCardDetailOut,
|
MedicalCardDetailOut,
|
||||||
MedicalCardCreate, MedicalCardBase, MedicalCardResponse)
|
MedicalCardCreateIn,
|
||||||
|
MedicalCardUpdateIn
|
||||||
|
)
|
||||||
from medical_info.services.base import BaseService
|
from medical_info.services.base import BaseService
|
||||||
from sqlalchemy.orm import Session
|
from sqlalchemy.orm import Session
|
||||||
from pydantic import parse_obj_as
|
from pydantic import parse_obj_as
|
||||||
from pydantic.types import UUID4
|
from pydantic.types import UUID4
|
||||||
from medical_info.db import schemas, models
|
from medical_info.db import models
|
||||||
from starlette.exceptions import HTTPException
|
from starlette.exceptions import HTTPException
|
||||||
import os
|
import os
|
||||||
import httpx
|
import httpx
|
||||||
|
|
||||||
class MedicalCardService(BaseService[MedicalCard, MedicalCardCreate, Any]):
|
class MedicalCardService(BaseService[models.MedicalCard, MedicalCardCreateIn, Any]):
|
||||||
def __init__(self, db_session: Session):
|
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'
|
LOCAL_PERSONAL_INFO_URL = 'http://localhost:8001/persons'
|
||||||
self.PERSONAL_INFO_URL = os.environ.get('ASTRA-PESONAL-INFORMATION') or LOCAL_PERSONAL_INFO_URL
|
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())
|
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 == '':
|
if searchstring is None or searchstring == '':
|
||||||
raise HTTPException(status_code=409, detail='searchstring is required')
|
raise HTTPException(status_code=409, detail='searchstring is required')
|
||||||
|
|
||||||
@@ -76,7 +77,7 @@ class MedicalCardService(BaseService[MedicalCard, MedicalCardCreate, Any]):
|
|||||||
|
|
||||||
return medical_card
|
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)
|
mc_obj = self.db_session.get(self.model, id)
|
||||||
if mc_obj is None:
|
if mc_obj is None:
|
||||||
raise HTTPException(status_code=404, detail='NotFound')
|
raise HTTPException(status_code=404, detail='NotFound')
|
||||||
|
|||||||
Reference in New Issue
Block a user