VIP super ultra draft medical card search)
This commit is contained in:
@@ -4,11 +4,14 @@ from typing import List, Optional, Any
|
|||||||
from datetime import date, datetime
|
from datetime import date, datetime
|
||||||
|
|
||||||
class Person(BaseModel):
|
class Person(BaseModel):
|
||||||
full_name: str
|
first_name: str
|
||||||
birth_date: date
|
last_name: str
|
||||||
|
patronymic: Optional[str]
|
||||||
|
birth_date: Optional[date]
|
||||||
class MedicalCardResponse(BaseModel):
|
class MedicalCardResponse(BaseModel):
|
||||||
id: UUID4
|
id: UUID4
|
||||||
number: Optional[str]
|
number: Optional[str]
|
||||||
|
person_id: UUID4
|
||||||
person: Person
|
person: Person
|
||||||
created_at: Optional[datetime]
|
created_at: Optional[datetime]
|
||||||
|
|
||||||
|
|||||||
@@ -10,9 +10,10 @@ router = APIRouter(prefix='/medical_cards')
|
|||||||
|
|
||||||
@router.get('/', response_model=List[MedicalCardResponse])
|
@router.get('/', response_model=List[MedicalCardResponse])
|
||||||
def list_medical_cards(
|
def list_medical_cards(
|
||||||
|
searchstring: str = '',
|
||||||
medical_cards_service: MedicalCardService = Depends(get_medical_cards_service)
|
medical_cards_service: MedicalCardService = Depends(get_medical_cards_service)
|
||||||
):
|
):
|
||||||
return medical_cards_service.list('sss')
|
return medical_cards_service.list(searchstring)
|
||||||
|
|
||||||
@router.get('/{medical_card_id}', response_model=MedicalCardDetail)
|
@router.get('/{medical_card_id}', response_model=MedicalCardDetail)
|
||||||
async def get_medical_card(
|
async def get_medical_card(
|
||||||
|
|||||||
@@ -7,30 +7,44 @@ 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 schemas, models
|
||||||
import requests
|
import requests
|
||||||
|
from starlette.exceptions import HTTPException
|
||||||
|
|
||||||
class MedicalCardService(BaseService[MedicalCard, MedicalCardCreate, Any]):
|
class MedicalCardService(BaseService[MedicalCard, MedicalCardCreate, Any]):
|
||||||
def __init__(self, db_session: Session):
|
def __init__(self, db_session: Session):
|
||||||
super(MedicalCardService, self).__init__(MedicalCard, db_session)
|
super(MedicalCardService, self).__init__(MedicalCard, db_session)
|
||||||
|
|
||||||
def list(self, searchstring: str) -> Any:
|
def list(self, searchstring: str) -> Any:
|
||||||
objs = self.db_session.query(models.MedicalCard).all()
|
#TODO установи корректные коды ошибки
|
||||||
medical_cards = parse_obj_as(List[schemas.MedicalCard], objs)
|
if searchstring is None or searchstring == '':
|
||||||
|
raise HTTPException(status_code=404, detail='searchstring is required')
|
||||||
medical_cards = [medical_card.dict() for medical_card in medical_cards]
|
|
||||||
|
|
||||||
|
personal_information_host = os.getenv('ASTRA-PESONAL-INFORMATION')
|
||||||
#personal_information_host = 'http://localhost:8001/persons'
|
#personal_information_host = 'http://localhost:8001/persons'
|
||||||
#TODO обобщение хоста personal_info
|
#TODO обобщение хоста personal_info
|
||||||
#TODO обработка ошибок ответа сервиса personal_info
|
#TODO обработка ошибок ответа сервиса personal_info
|
||||||
|
|
||||||
# CONTINUE
|
person_response = requests.get(f'{personal_information_host}/?full_name={searchstring}')
|
||||||
|
|
||||||
# person_response = requests.get(f'{personal_information_host}/{obj.person_id}')
|
persons = person_response.json()
|
||||||
|
person_ids = [person['id'] for person in persons]
|
||||||
|
|
||||||
person = {'full_name': 'Жижин Антон Семенович', 'birth_date': '2012-03-10'}
|
if len(person_ids) < 1:
|
||||||
|
return []
|
||||||
|
|
||||||
|
|
||||||
|
objs = self.db_session.query(models.MedicalCard).filter(models.MedicalCard.person_id.in_(person_ids)).all()
|
||||||
|
medical_cards = parse_obj_as(List[schemas.MedicalCard], objs)
|
||||||
|
medical_cards = [medical_card.dict() for medical_card in medical_cards]
|
||||||
|
|
||||||
|
|
||||||
|
res = list()
|
||||||
for m in medical_cards:
|
for m in medical_cards:
|
||||||
print(m)
|
|
||||||
m["person"] = person
|
person = next(filter(lambda person: str(person["id"]) == str(m["person_id"]) , persons), None)
|
||||||
return medical_cards
|
if person is not None:
|
||||||
|
m['person'] = {**person}
|
||||||
|
res.append(m)
|
||||||
|
return res
|
||||||
|
|
||||||
def get(self, id: UUID4) -> Optional[schemas.MedicalCardDetail]:
|
def get(self, id: UUID4) -> Optional[schemas.MedicalCardDetail]:
|
||||||
obj: Optional[models.MedicalCard] = self.db_session.get(self.model, id)
|
obj: Optional[models.MedicalCard] = self.db_session.get(self.model, id)
|
||||||
|
|||||||
Reference in New Issue
Block a user