diff --git a/src/personal_info/db/schemas/person.py b/src/personal_info/db/schemas/person.py index 8564a9f..d492e5d 100644 --- a/src/personal_info/db/schemas/person.py +++ b/src/personal_info/db/schemas/person.py @@ -98,4 +98,18 @@ class PersonDetail(Person): last_name: str class PersonSearchIn(BaseModel): - full_name: str \ No newline at end of file + full_name: str + +class PersonSearchOut(BaseModel): + id: UUID4 + first_name: str + 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]] = [] + + class Config: + orm_mode = True \ No newline at end of file diff --git a/src/personal_info/routers/persons.py b/src/personal_info/routers/persons.py index 6199754..2bb6485 100644 --- a/src/personal_info/routers/persons.py +++ b/src/personal_info/routers/persons.py @@ -8,7 +8,8 @@ from personal_info.db.schemas import ( Person, PersonDetail, PersonCreate, - PersonSearchIn + PersonSearchIn, + PersonSearchOut ) from personal_info.services import PersonService, get_persons_service @@ -42,7 +43,7 @@ async def batch_list_persons( ) -> List[models.Person]: return persons_service.batch_get(request) -@router.post('/search', response_model=List[Person]) +@router.post('/search', response_model=List[PersonSearchOut]) async def search_person( query_params: PersonSearchIn, persons_service: PersonService = Depends(get_persons_service) diff --git a/src/personal_info/services/persons.py b/src/personal_info/services/persons.py index e2388e5..23ef36e 100644 --- a/src/personal_info/services/persons.py +++ b/src/personal_info/services/persons.py @@ -55,5 +55,5 @@ class PersonService(BaseService[Person, PersonCreate, Any]): full_name = str(query_params.full_name).lower() if full_name == '': return [] - objs: List[Person] = self.db_session.query(Person).filter(Person.full_name.contains(full_name)).all() + objs: List[Person] = self.db_session.query(Person).filter(Person.full_name.istartswith(full_name)).all() return objs \ No newline at end of file