medical card update

This commit is contained in:
dderbentsov
2023-08-04 00:34:05 +03:00
parent a30fb1584f
commit 09126fa69a
3 changed files with 41 additions and 9 deletions

View File

@@ -76,6 +76,17 @@ class MedicalCardSimple(BaseModel):
orm_mode = True orm_mode = True
class MedicalCard(BaseModel): class MedicalCard(BaseModel):
id: UUID4
number: str
created_at: datetime
person_id: UUID4
class Config:
orm_mode = True
class MedicalCardUpdateRq(BaseModel):
number: str | None
class MedicalCardUpdateRs(BaseModel):
id: UUID4 id: UUID4
number: str number: str
created_at: datetime created_at: datetime

View File

@@ -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)

View File

@@ -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
@@ -60,4 +59,17 @@ 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