medical card detail

This commit is contained in:
dderbentsov
2023-08-02 23:59:14 +03:00
parent 12d4a1aab2
commit 784f4e4964
2 changed files with 18 additions and 15 deletions

View File

@@ -24,7 +24,7 @@ class MedicalCardBase(BaseModel):
class Config: class Config:
orm_mode = True orm_mode = True
class AddressCreate(BaseModel): class PersonAddress(BaseModel):
category: str category: str
region: Optional[str] region: Optional[str]
city: Optional[str] city: Optional[str]
@@ -32,11 +32,11 @@ class AddressCreate(BaseModel):
house: Optional[str] house: Optional[str]
flat: Optional[str] flat: Optional[str]
class ContactCreate(BaseModel): class PersonContact(BaseModel):
category: str category: str
value: str value: str
class DocumentCreate(BaseModel): class PersonDocument(BaseModel):
category: str category: str
series: str series: str
number: str number: str
@@ -44,17 +44,17 @@ class DocumentCreate(BaseModel):
issued_at: Optional[date] issued_at: Optional[date]
attachments: Optional[List[str]] attachments: Optional[List[str]]
class PersonDetail(BaseModel): class PersonDetail(BaseModel):
first_name: str first_name: str
last_name: str last_name: str
patronymic: Optional[str] patronymic: Optional[str]
gender: Optional[str] gender: Optional[str]
birth_date: Optional[date] birth_date: Optional[date]
addresses: Optional[List[AddressCreate]] = [] addresses: Optional[List[PersonAddress]] = []
contacts: Optional[List[ContactCreate]] = [] contacts: Optional[List[PersonContact]] = []
documents: Optional[List[DocumentCreate]] = [] documents: Optional[List[PersonDocument]] = []
photos: Optional[List[str]] = [] photos: Optional[List[str]] = []
class MedicalCardDetail(BaseModel): class MedicalCardDetail(BaseModel):
id: UUID4 id: UUID4
number: str number: str

View File

@@ -3,8 +3,9 @@ from medical_info.db.models import MedicalCard
from medical_info.db.schemas import MedicalCardCreate, MedicalCardBase, MedicalCardResponse, PersonDetail, MedicalCardDetail from medical_info.db.schemas import MedicalCardCreate, MedicalCardBase, MedicalCardResponse, PersonDetail, MedicalCardDetail
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 sqlalchemy.sql.expression import literal
from pydantic import parse_obj_as from pydantic import parse_obj_as
from pydantic.types import UUID4
from medical_info.db import schemas, models
import requests import requests
class MedicalCardService(BaseService[MedicalCard, MedicalCardCreate, Any]): class MedicalCardService(BaseService[MedicalCard, MedicalCardCreate, Any]):
@@ -23,16 +24,18 @@ class MedicalCardService(BaseService[MedicalCard, MedicalCardCreate, Any]):
m["person"] = person m["person"] = person
return medical_cards return medical_cards
def get(self, id: Any) -> Optional[MedicalCard]: def get(self, id: UUID4) -> Optional[schemas.MedicalCardDetail]:
obj: Optional[MedicalCard] = self.db_session.get(self.model, id) obj: Optional[models.MedicalCard] = self.db_session.get(self.model, id)
if obj is None: if obj is None:
raise HTTPException(status_code=404, detail='NotFound') raise HTTPException(status_code=404, detail='NotFound')
personal_information_host = os.getenv('ASTRA-PESONAL-INFORMATION') # personal_information_host = os.getenv('ASTRA-PESONAL-INFORMATION')
# personal_information_host = 'http://localhost:8001/persons' personal_information_host = 'http://localhost:8001/persons'
response = requests.get(f'{personal_information_host}/{obj.person_id}') #TODO обработка ошибок ответа сервиса personal_info
medical_info = MedicalCardDetail.from_orm(obj).dict() person_response = requests.get(f'{personal_information_host}/{obj.person_id}')
medical_info['person'] = PersonDetail(**response.json()).dict()
medical_info = schemas.MedicalCardDetail.from_orm(obj).dict()
medical_info['person'] = schemas.PersonDetail(**person_response.json()).dict()
return medical_info return medical_info