From f68d46ec21cbd4e1c368f26ed472e4b54fd1e067 Mon Sep 17 00:00:00 2001 From: dderbentsov Date: Wed, 2 Aug 2023 01:22:07 +0300 Subject: [PATCH] draft list medical_card --- src/medical_info/db/schemas/medical_card.py | 23 ++++++++++++++++++--- src/medical_info/routers/medical_cards.py | 6 +++--- src/medical_info/services/medical_cards.py | 23 +++++++++++++++++++-- 3 files changed, 44 insertions(+), 8 deletions(-) diff --git a/src/medical_info/db/schemas/medical_card.py b/src/medical_info/db/schemas/medical_card.py index f18af80..2af40e7 100644 --- a/src/medical_info/db/schemas/medical_card.py +++ b/src/medical_info/db/schemas/medical_card.py @@ -1,13 +1,30 @@ from pydantic import BaseModel from pydantic.types import UUID4, Json from typing import List, Optional, Any +from datetime import date, datetime +class Person(BaseModel): + full_name: str + birth_date: date class MedicalCardResponse(BaseModel): id: UUID4 + number: Optional[str] + person: Person + created_at: Optional[datetime] + + + +class MedicalCardCreate(BaseModel): + number: str + person_id: UUID4 + +class MedicalCardBase(BaseModel): + id: UUID4 class Config: orm_mode = True -class MedicalCardCreate(BaseModel): - number: str - person_id: UUID4 +class MedicalCards(BaseModel): + __root__: List[MedicalCardBase] + class Config: + orm_mode = True \ No newline at end of file diff --git a/src/medical_info/routers/medical_cards.py b/src/medical_info/routers/medical_cards.py index 35b3df6..46e9788 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 from medical_info.db import models -from medical_info.db.schemas import MedicalCardResponse, MedicalCardCreate +from medical_info.db.schemas import MedicalCardResponse, MedicalCardCreate, MedicalCardBase from medical_info.services import MedicalCardService, get_medical_cards_service router = APIRouter(prefix='/medical_cards') @@ -11,8 +11,8 @@ router = APIRouter(prefix='/medical_cards') @router.get('/', response_model=List[MedicalCardResponse]) def list_medical_cards( medical_cards_service: MedicalCardService = Depends(get_medical_cards_service) -) -> List[models.MedicalCard]: - return medical_cards_service.list() +): + return medical_cards_service.list('sss') @router.post('/', status_code=201, response_model=MedicalCardResponse) async def create_medical_card( diff --git a/src/medical_info/services/medical_cards.py b/src/medical_info/services/medical_cards.py index a0fb61e..747ce4e 100644 --- a/src/medical_info/services/medical_cards.py +++ b/src/medical_info/services/medical_cards.py @@ -1,9 +1,28 @@ -from typing import Any +from typing import Any, List from medical_info.db.models import MedicalCard -from medical_info.db.schemas import MedicalCardCreate +from medical_info.db.schemas import MedicalCardCreate, MedicalCardBase, MedicalCardResponse, MedicalCards from medical_info.services.base import BaseService from sqlalchemy.orm import Session +from sqlalchemy.sql.expression import literal +from pydantic import parse_obj_as class MedicalCardService(BaseService[MedicalCard, MedicalCardCreate, Any]): def __init__(self, db_session: Session): super(MedicalCardService, self).__init__(MedicalCard, db_session) + + def list(self, searchstring: str) -> dict: + medical_cards_rows = self.db_session.query(MedicalCard).all() + medical_cards = parse_obj_as(List[MedicalCardBase], medical_cards_rows) + + # medical_cards = MedicalCards.from_orm(medical_cards_rows) + + medical_cards = [medical_card.dict() for medical_card in medical_cards] + + + # medical_cards = medical_cards["__root__"] + print(medical_cards) + person = {'full_name': 'Жижин Антон Семенович', 'birth_date': '2012-03-10'} + for m in medical_cards: + print(m) + m["person"] = person + return medical_cards \ No newline at end of file