fix medical card detail

This commit is contained in:
dderbentsov
2023-08-05 02:55:01 +03:00
parent 687659f42b
commit 446fbdab1c
3 changed files with 29 additions and 21 deletions

View File

@@ -2,8 +2,9 @@ from typing import Any, List, Optional
from medical_info.db.models import MedicalCard
from medical_info.db.schemas import (
PersonOut,
MedicalCardOut,
MedicalCardCreate, MedicalCardBase, MedicalCardResponse, MedicalCardDetail)
MedicalCardOut,
MedicalCardDetailOut,
MedicalCardCreate, MedicalCardBase, MedicalCardResponse)
from medical_info.services.base import BaseService
from sqlalchemy.orm import Session
from pydantic import parse_obj_as
@@ -20,7 +21,6 @@ class MedicalCardService(BaseService[MedicalCard, MedicalCardCreate, Any]):
self.PERSONAL_INFO_URL = os.environ.get('ASTRA-PESONAL-INFORMATION') or LOCAL_PERSONAL_INFO_URL
def get_persons(self, searchstring: str) -> List[PersonOut]:
try:
response = httpx.get(f'{self.PERSONAL_INFO_URL}/?full_name={searchstring}')
response.raise_for_status()
@@ -31,7 +31,20 @@ class MedicalCardService(BaseService[MedicalCard, MedicalCardCreate, Any]):
print(f"Ошибка {exc.response.status_code} при запросе {exc.request.url!r}.")
raise HTTPException(status_code=exc.response.status_code, detail=f"Ошибка вызова {exc.request.url!r}.")
return parse_obj_as(List[schemas.PersonOut], response.json())
return parse_obj_as(List[PersonOut], response.json())
def get_person(self, id: UUID4) -> PersonOut:
try:
response = httpx.get(f'{self.PERSONAL_INFO_URL}/{id}')
response.raise_for_status()
except httpx.RequestError as exc:
print(f"Ошибка вызова {exc.request.url!r}.")
raise HTTPException(status_code=500, detail=f"Ошибка вызова {exc.request.url!r}.")
except httpx.HTTPStatusError as exc:
print(f"Ошибка {exc.response.status_code} при запросе {exc.request.url!r}.")
raise HTTPException(status_code=exc.response.status_code, detail=f"Ошибка вызова {exc.request.url!r}.")
return parse_obj_as(PersonOut, response.json())
def list(self, searchstring: str) -> Any:
if searchstring is None or searchstring == '':
@@ -53,21 +66,15 @@ class MedicalCardService(BaseService[MedicalCard, MedicalCardCreate, Any]):
return medical_cards
def get(self, id: UUID4) -> Optional[schemas.MedicalCardDetail]:
obj: Optional[models.MedicalCard] = self.db_session.get(self.model, id)
if obj is None:
raise HTTPException(status_code=404, detail='NotFound')
def get(self, id: UUID4) -> Optional[MedicalCardDetailOut]:
medical_card_obj: Optional[models.MedicalCard] = self.db_session.get(self.model, id)
if medical_card_obj is None:
raise HTTPException(status_code=404, detail=f'Медкарта {id} не найдена')
personal_information_host = os.getenv('ASTRA-PESONAL-INFORMATION')
#personal_information_host = 'http://localhost:8001/persons'
medical_card = MedicalCardDetailOut.from_orm(medical_card_obj)
medical_card.person = self.get_person(medical_card_obj.person_id)
#TODO обработка ошибок ответа сервиса personal_info
person_response = requests.get(f'{personal_information_host}/{obj.person_id}')
medical_info = schemas.MedicalCardDetail.from_orm(obj).dict()
medical_info['person'] = schemas.PersonDetail(**person_response.json()).dict()
return medical_info
return medical_card
def update(self, id: UUID4, mc_request: schemas.MedicalCardUpdateRq) -> Optional[MedicalCard]:
mc_obj = self.db_session.get(self.model, id)