fix medical card detail
This commit is contained in:
@@ -24,7 +24,7 @@ class MedicalCardBase(BaseModel):
|
|||||||
orm_mode = True
|
orm_mode = True
|
||||||
|
|
||||||
|
|
||||||
class MedicalCardDetail(BaseModel):
|
class MedicalCardDetailOut(BaseModel):
|
||||||
id: UUID4
|
id: UUID4
|
||||||
number: str
|
number: str
|
||||||
created_at: datetime
|
created_at: datetime
|
||||||
|
|||||||
@@ -5,7 +5,8 @@ from pydantic.types import UUID4
|
|||||||
from medical_info.db import models, schemas
|
from medical_info.db import models, schemas
|
||||||
from medical_info.db.schemas import (
|
from medical_info.db.schemas import (
|
||||||
MedicalCardOut,
|
MedicalCardOut,
|
||||||
MedicalCardResponse, MedicalCardCreate, MedicalCardBase,MedicalCardDetail, MedicalCardUpdateRq)
|
MedicalCardDetailOut,
|
||||||
|
MedicalCardResponse, MedicalCardCreate, MedicalCardBase, MedicalCardUpdateRq)
|
||||||
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')
|
||||||
@@ -17,10 +18,10 @@ def list_medical_cards(
|
|||||||
):
|
):
|
||||||
return medical_cards_service.list(searchstring)
|
return medical_cards_service.list(searchstring)
|
||||||
|
|
||||||
@router.get('/{medical_card_id}', response_model=MedicalCardDetail)
|
@router.get('/{medical_card_id}', response_model=MedicalCardDetailOut)
|
||||||
async def get_medical_card(
|
async def get_medical_card(
|
||||||
medical_card_id: UUID4, medical_cards_service: MedicalCardService = Depends(get_medical_cards_service)
|
medical_card_id: UUID4, medical_cards_service: MedicalCardService = Depends(get_medical_cards_service)
|
||||||
) -> Optional[MedicalCardDetail]:
|
) -> 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=schemas.MedicalCardBase)
|
||||||
|
|||||||
@@ -3,7 +3,8 @@ from medical_info.db.models import MedicalCard
|
|||||||
from medical_info.db.schemas import (
|
from medical_info.db.schemas import (
|
||||||
PersonOut,
|
PersonOut,
|
||||||
MedicalCardOut,
|
MedicalCardOut,
|
||||||
MedicalCardCreate, MedicalCardBase, MedicalCardResponse, MedicalCardDetail)
|
MedicalCardDetailOut,
|
||||||
|
MedicalCardCreate, MedicalCardBase, MedicalCardResponse)
|
||||||
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
|
||||||
@@ -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
|
self.PERSONAL_INFO_URL = os.environ.get('ASTRA-PESONAL-INFORMATION') or LOCAL_PERSONAL_INFO_URL
|
||||||
|
|
||||||
def get_persons(self, searchstring: str) -> List[PersonOut]:
|
def get_persons(self, searchstring: str) -> List[PersonOut]:
|
||||||
|
|
||||||
try:
|
try:
|
||||||
response = httpx.get(f'{self.PERSONAL_INFO_URL}/?full_name={searchstring}')
|
response = httpx.get(f'{self.PERSONAL_INFO_URL}/?full_name={searchstring}')
|
||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
@@ -31,7 +31,20 @@ class MedicalCardService(BaseService[MedicalCard, MedicalCardCreate, Any]):
|
|||||||
print(f"Ошибка {exc.response.status_code} при запросе {exc.request.url!r}.")
|
print(f"Ошибка {exc.response.status_code} при запросе {exc.request.url!r}.")
|
||||||
raise HTTPException(status_code=exc.response.status_code, detail=f"Ошибка вызова {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:
|
def list(self, searchstring: str) -> Any:
|
||||||
if searchstring is None or searchstring == '':
|
if searchstring is None or searchstring == '':
|
||||||
@@ -53,21 +66,15 @@ class MedicalCardService(BaseService[MedicalCard, MedicalCardCreate, Any]):
|
|||||||
|
|
||||||
return medical_cards
|
return medical_cards
|
||||||
|
|
||||||
def get(self, id: UUID4) -> Optional[schemas.MedicalCardDetail]:
|
def get(self, id: UUID4) -> Optional[MedicalCardDetailOut]:
|
||||||
obj: Optional[models.MedicalCard] = self.db_session.get(self.model, id)
|
medical_card_obj: Optional[models.MedicalCard] = self.db_session.get(self.model, id)
|
||||||
if obj is None:
|
if medical_card_obj is None:
|
||||||
raise HTTPException(status_code=404, detail='NotFound')
|
raise HTTPException(status_code=404, detail=f'Медкарта {id} не найдена')
|
||||||
|
|
||||||
personal_information_host = os.getenv('ASTRA-PESONAL-INFORMATION')
|
medical_card = MedicalCardDetailOut.from_orm(medical_card_obj)
|
||||||
#personal_information_host = 'http://localhost:8001/persons'
|
medical_card.person = self.get_person(medical_card_obj.person_id)
|
||||||
|
|
||||||
#TODO обработка ошибок ответа сервиса personal_info
|
return medical_card
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
def update(self, id: UUID4, mc_request: schemas.MedicalCardUpdateRq) -> Optional[MedicalCard]:
|
def update(self, id: UUID4, mc_request: schemas.MedicalCardUpdateRq) -> Optional[MedicalCard]:
|
||||||
mc_obj = self.db_session.get(self.model, id)
|
mc_obj = self.db_session.get(self.model, id)
|
||||||
|
|||||||
Reference in New Issue
Block a user