diff --git a/src/medical_info/db/schemas/medical_card.py b/src/medical_info/db/schemas/medical_card.py index e2c86dc..722f668 100644 --- a/src/medical_info/db/schemas/medical_card.py +++ b/src/medical_info/db/schemas/medical_card.py @@ -76,6 +76,17 @@ class MedicalCardSimple(BaseModel): orm_mode = True 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 number: str created_at: datetime diff --git a/src/medical_info/routers/medical_cards.py b/src/medical_info/routers/medical_cards.py index 8b7a83b..9777102 100644 --- a/src/medical_info/routers/medical_cards.py +++ b/src/medical_info/routers/medical_cards.py @@ -3,7 +3,7 @@ from fastapi.routing import APIRouter from typing import List, Optional from pydantic.types import UUID4 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 router = APIRouter(prefix='/medical_cards') @@ -21,8 +21,17 @@ async def get_medical_card( ) -> Optional[MedicalCardDetail]: 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( medical_card: MedicalCardCreate, medical_cards_service: MedicalCardService = Depends(get_medical_cards_service) ) -> models.MedicalCard: - return medical_cards_service.create(medical_card) \ No newline at end of file + 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) + \ No newline at end of file diff --git a/src/medical_info/services/medical_cards.py b/src/medical_info/services/medical_cards.py index 17a74ec..fa9ed81 100644 --- a/src/medical_info/services/medical_cards.py +++ b/src/medical_info/services/medical_cards.py @@ -18,8 +18,8 @@ class MedicalCardService(BaseService[MedicalCard, MedicalCardCreate, Any]): if searchstring is None or searchstring == '': raise HTTPException(status_code=404, detail='searchstring is required') - personal_information_host = os.getenv('ASTRA-PESONAL-INFORMATION') - #personal_information_host = 'http://localhost:8001/persons' + # personal_information_host = os.getenv('ASTRA-PESONAL-INFORMATION') + personal_information_host = 'http://localhost:8001/persons' #TODO обобщение хоста personal_info #TODO обработка ошибок ответа сервиса personal_info @@ -31,7 +31,6 @@ class MedicalCardService(BaseService[MedicalCard, MedicalCardCreate, Any]): 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] @@ -51,8 +50,8 @@ class MedicalCardService(BaseService[MedicalCard, MedicalCardCreate, Any]): if obj is None: raise HTTPException(status_code=404, detail='NotFound') - personal_information_host = os.getenv('ASTRA-PESONAL-INFORMATION') - # personal_information_host = 'http://localhost:8001/persons' + # personal_information_host = os.getenv('ASTRA-PESONAL-INFORMATION') + personal_information_host = 'http://localhost:8001/persons' #TODO обработка ошибок ответа сервиса personal_info @@ -60,4 +59,17 @@ class MedicalCardService(BaseService[MedicalCard, MedicalCardCreate, Any]): medical_info = schemas.MedicalCardDetail.from_orm(obj).dict() medical_info['person'] = schemas.PersonDetail(**person_response.json()).dict() - return medical_info \ No newline at end of file + 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 + \ No newline at end of file