VIP medical_cards detail

This commit is contained in:
dderbentsov
2023-08-02 02:56:31 +03:00
parent 276bfa69a1
commit e4d6dfafca
3 changed files with 53 additions and 16 deletions

View File

@@ -24,15 +24,42 @@ class MedicalCardBase(BaseModel):
class Config:
orm_mode = True
class MedicalCards(BaseModel):
__root__: List[MedicalCardBase]
class Config:
orm_mode = True
class AddressCreate(BaseModel):
category: str
region: Optional[str]
city: Optional[str]
street: Optional[str]
house: Optional[str]
flat: Optional[str]
class ContactCreate(BaseModel):
category: str
value: str
class DocumentCreate(BaseModel):
category: str
series: str
number: str
issued_by: str
issued_at: Optional[date]
attachments: Optional[List[str]]
class PersonDetail(BaseModel):
first_name: str
last_name: str
patronymic: Optional[str]
gender: Optional[str]
birth_date: Optional[date]
addresses: Optional[List[AddressCreate]] = []
contacts: Optional[List[ContactCreate]] = []
documents: Optional[List[DocumentCreate]] = []
photos: Optional[List[str]] = []
class MedicalCardDetail(BaseModel):
id: UUID4
number: Optional[str]
created_at: Optional[datetime]
number: str
created_at: datetime
person_id: UUID4
person: Optional[PersonDetail]
class Config:
orm_mode = True

View File

@@ -17,7 +17,7 @@ def list_medical_cards(
@router.get('/{medical_card_id}', response_model=MedicalCardDetail)
async def get_medical_card(
medical_card_id: UUID4, medical_cards_service: MedicalCardService = Depends(get_medical_cards_service)
) -> Optional[models.MedicalCard]:
) -> Optional[MedicalCardDetail]:
return medical_cards_service.get(medical_card_id)
@router.post('/', status_code=201, response_model=MedicalCardBase)

View File

@@ -1,10 +1,11 @@
from typing import Any, List
from typing import Any, List, Optional
from medical_info.db.models import MedicalCard
from medical_info.db.schemas import MedicalCardCreate, MedicalCardBase, MedicalCardResponse, MedicalCards
from medical_info.db.schemas import MedicalCardCreate, MedicalCardBase, MedicalCardResponse, PersonDetail, MedicalCardDetail
from medical_info.services.base import BaseService
from sqlalchemy.orm import Session
from sqlalchemy.sql.expression import literal
from pydantic import parse_obj_as
import requests
class MedicalCardService(BaseService[MedicalCard, MedicalCardCreate, Any]):
def __init__(self, db_session: Session):
@@ -14,15 +15,24 @@ class MedicalCardService(BaseService[MedicalCard, MedicalCardCreate, Any]):
medical_cards_rows = self.db_session.query(MedicalCard).all()
medical_cards = parse_obj_as(List[MedicalCardBase], medical_cards_rows)
# medical_cards = MedicalCards.from_orm(medical_cards_rows)
medical_cards = [medical_card.dict() for medical_card in medical_cards]
# medical_cards = medical_cards["__root__"]
print(medical_cards)
person = {'full_name': 'Жижин Антон Семенович', 'birth_date': '2012-03-10'}
for m in medical_cards:
print(m)
m["person"] = person
return medical_cards
def get(self, id: Any) -> Optional[MedicalCard]:
obj: Optional[MedicalCard] = self.db_session.get(self.model, id)
if obj is None:
raise HTTPException(status_code=404, detail='NotFound')
personal_information_host = os.getenv('ASTRA-PESONAL-INFORMATION')
# personal_information_host = 'http://localhost:8001/persons'
response = requests.get(f'{personal_information_host}/{obj.person_id}')
medical_info = MedicalCardDetail.from_orm(obj).dict()
medical_info['person'] = PersonDetail(**response.json()).dict()
return medical_info