medical card update
This commit is contained in:
@@ -82,3 +82,14 @@ class MedicalCard(BaseModel):
|
|||||||
person_id: UUID4
|
person_id: UUID4
|
||||||
class Config:
|
class Config:
|
||||||
orm_mode = True
|
orm_mode = True
|
||||||
|
|
||||||
|
class MedicalCardUpdateRq(BaseModel):
|
||||||
|
number: str | None
|
||||||
|
|
||||||
|
class MedicalCardUpdateRs(BaseModel):
|
||||||
|
id: UUID4
|
||||||
|
number: str
|
||||||
|
created_at: datetime
|
||||||
|
person_id: UUID4
|
||||||
|
class Config:
|
||||||
|
orm_mode = True
|
||||||
@@ -3,7 +3,7 @@ from fastapi.routing import APIRouter
|
|||||||
from typing import List, Optional
|
from typing import List, Optional
|
||||||
from pydantic.types import UUID4
|
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 MedicalCardResponse, MedicalCardCreate, MedicalCardBase,MedicalCardDetail
|
from medical_info.db.schemas import MedicalCardResponse, MedicalCardCreate, MedicalCardBase,MedicalCardDetail, 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')
|
||||||
@@ -21,8 +21,17 @@ async def get_medical_card(
|
|||||||
) -> Optional[MedicalCardDetail]:
|
) -> Optional[MedicalCardDetail]:
|
||||||
return medical_cards_service.get(medical_card_id)
|
return medical_cards_service.get(medical_card_id)
|
||||||
|
|
||||||
@router.post('/', status_code=201, response_model=MedicalCardBase)
|
@router.post('/', status_code=201, response_model=schemas.MedicalCardBase)
|
||||||
async def create_medical_card(
|
async def create_medical_card(
|
||||||
medical_card: MedicalCardCreate, medical_cards_service: MedicalCardService = Depends(get_medical_cards_service)
|
medical_card: MedicalCardCreate, medical_cards_service: MedicalCardService = Depends(get_medical_cards_service)
|
||||||
) -> models.MedicalCard:
|
) -> models.MedicalCard:
|
||||||
return medical_cards_service.create(medical_card)
|
return medical_cards_service.create(medical_card)
|
||||||
|
|
||||||
|
@router.patch('/{medical_card_id}', response_model=schemas.MedicalCardUpdateRs)
|
||||||
|
async def update_medical_card(
|
||||||
|
medical_card_id: UUID4,
|
||||||
|
medical_card: MedicalCardUpdateRq,
|
||||||
|
medical_cards_service: MedicalCardService = Depends(get_medical_cards_service)
|
||||||
|
) -> Optional[models.MedicalCard]:
|
||||||
|
return medical_cards_service.update(medical_card_id, medical_card)
|
||||||
|
|
||||||
@@ -18,8 +18,8 @@ class MedicalCardService(BaseService[MedicalCard, MedicalCardCreate, Any]):
|
|||||||
if searchstring is None or searchstring == '':
|
if searchstring is None or searchstring == '':
|
||||||
raise HTTPException(status_code=404, detail='searchstring is required')
|
raise HTTPException(status_code=404, detail='searchstring is required')
|
||||||
|
|
||||||
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'
|
||||||
#TODO обобщение хоста personal_info
|
#TODO обобщение хоста personal_info
|
||||||
#TODO обработка ошибок ответа сервиса personal_info
|
#TODO обработка ошибок ответа сервиса personal_info
|
||||||
|
|
||||||
@@ -31,7 +31,6 @@ class MedicalCardService(BaseService[MedicalCard, MedicalCardCreate, Any]):
|
|||||||
if len(person_ids) < 1:
|
if len(person_ids) < 1:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
||||||
objs = self.db_session.query(models.MedicalCard).filter(models.MedicalCard.person_id.in_(person_ids)).all()
|
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 = parse_obj_as(List[schemas.MedicalCard], objs)
|
||||||
medical_cards = [medical_card.dict() for medical_card in medical_cards]
|
medical_cards = [medical_card.dict() for medical_card in medical_cards]
|
||||||
@@ -51,8 +50,8 @@ class MedicalCardService(BaseService[MedicalCard, MedicalCardCreate, Any]):
|
|||||||
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'
|
||||||
|
|
||||||
#TODO обработка ошибок ответа сервиса personal_info
|
#TODO обработка ошибок ответа сервиса personal_info
|
||||||
|
|
||||||
@@ -61,3 +60,16 @@ class MedicalCardService(BaseService[MedicalCard, MedicalCardCreate, Any]):
|
|||||||
medical_info = schemas.MedicalCardDetail.from_orm(obj).dict()
|
medical_info = schemas.MedicalCardDetail.from_orm(obj).dict()
|
||||||
medical_info['person'] = schemas.PersonDetail(**person_response.json()).dict()
|
medical_info['person'] = schemas.PersonDetail(**person_response.json()).dict()
|
||||||
return medical_info
|
return medical_info
|
||||||
|
|
||||||
|
def update(self, id: UUID4, mc_request: schemas.MedicalCardUpdateRq) -> Optional[MedicalCard]:
|
||||||
|
mc_obj = self.db_session.get(self.model, id)
|
||||||
|
if mc_obj is None:
|
||||||
|
raise HTTPException(status_code=404, detail='NotFound')
|
||||||
|
|
||||||
|
for column, value in mc_request.dict(exclude_unset=True).items():
|
||||||
|
setattr(mc_obj, column, value)
|
||||||
|
|
||||||
|
self.db_session.commit()
|
||||||
|
|
||||||
|
return mc_obj
|
||||||
|
|
||||||
Reference in New Issue
Block a user