From 6c80a9e4b78d12eed0ff64e87c2cbf750c3ebd72 Mon Sep 17 00:00:00 2001 From: dderbentsov Date: Mon, 9 Oct 2023 00:27:58 +0300 Subject: [PATCH] search and update --- src/personal_info/db/schemas/person.py | 19 ++++++++++++++----- src/personal_info/routers/persons.py | 14 ++++++++++++-- src/personal_info/services/persons.py | 5 +++-- 3 files changed, 29 insertions(+), 9 deletions(-) diff --git a/src/personal_info/db/schemas/person.py b/src/personal_info/db/schemas/person.py index d492e5d..7d8c95d 100644 --- a/src/personal_info/db/schemas/person.py +++ b/src/personal_info/db/schemas/person.py @@ -106,10 +106,19 @@ class PersonSearchOut(BaseModel): last_name: str patronymic: Optional[str] birth_date: Optional[date] - medical_card_id: str | None - contacts: Optional[List[Contact]] = [] - addresses: Optional[List[Address]] = [] - documents: Optional[List[Document]] = [] + medical_card_id: UUID4 | None + contacts: List[Contact] class Config: - orm_mode = True \ No newline at end of file + orm_mode = True + + +class PersonUpdateIn(BaseModel): + medical_card_id: UUID4 + class Config: + orm_mode = True + +class PersonUpdateOut(BaseModel): + id: UUID4 + class Config: + orm_mode = True diff --git a/src/personal_info/routers/persons.py b/src/personal_info/routers/persons.py index 2bb6485..678430b 100644 --- a/src/personal_info/routers/persons.py +++ b/src/personal_info/routers/persons.py @@ -9,7 +9,9 @@ from personal_info.db.schemas import ( PersonDetail, PersonCreate, PersonSearchIn, - PersonSearchOut + PersonSearchOut, + PersonUpdateIn, + PersonUpdateOut ) from personal_info.services import PersonService, get_persons_service @@ -48,4 +50,12 @@ async def search_person( query_params: PersonSearchIn, persons_service: PersonService = Depends(get_persons_service) ) -> List[models.Person]: - return persons_service.search(query_params) \ No newline at end of file + return persons_service.search(query_params) + +@router.patch('/{person_id}', response_model=PersonUpdateOut) +async def update_person( + person_id: UUID4, + person: PersonUpdateIn, + person_service: PersonService = Depends(get_persons_service) +): + return person_service.update(person_id, person) \ No newline at end of file diff --git a/src/personal_info/services/persons.py b/src/personal_info/services/persons.py index 23ef36e..3c923e1 100644 --- a/src/personal_info/services/persons.py +++ b/src/personal_info/services/persons.py @@ -1,11 +1,12 @@ -from typing import Any, List, Dict +from typing import Any, List, Dict, Optional from sqlalchemy.orm import Session from starlette.exceptions import HTTPException from personal_info.db.models import Person, Address, Document, Contact -from personal_info.db.schemas import PersonCreate, PersonBase +from personal_info.db.schemas import PersonCreate, PersonBase, PersonUpdateIn, PersonUpdateOut from personal_info.db import models from personal_info.services.base import BaseService +from pydantic.types import UUID4 class PersonService(BaseService[Person, PersonCreate, Any]): def __init__(self, db_session: Session):