VIP Person Batch query

This commit is contained in:
dderbentsov
2023-08-03 01:21:17 +03:00
parent 5a71287fe4
commit ae18a3841a
3 changed files with 33 additions and 14 deletions

View File

@@ -4,14 +4,7 @@ from typing import List, Optional
from pydantic import BaseModel, Field, ConfigDict
from pydantic.types import UUID4
class Person(BaseModel):
id: UUID4
first_name: str
last_name: str
patronymic: Optional[str]
class Config:
orm_mode = True
class PersonBase(BaseModel):
first_name: str
@@ -56,6 +49,19 @@ class PersonCreate(PersonBase):
photos: Optional[List[str]] = []
class Person(BaseModel):
id: UUID4
first_name: str
last_name: str
patronymic: Optional[str]
birth_date: Optional[date]
contacts: Optional[List[ContactCreate]] = []
class Config:
orm_mode = True
class PersonDetail(Person):
id: UUID4
first_name: str

View File

@@ -1,9 +1,9 @@
from fastapi import Depends, Request
from fastapi.routing import APIRouter
from pydantic.types import UUID4
from typing import List, Optional
from typing import List, Optional, Dict
from personal_info.db import models
from personal_info.db import models, schemas
from personal_info.db.schemas import Person, PersonDetail, PersonCreate
from personal_info.services import PersonService, get_persons_service
@@ -29,3 +29,10 @@ async def create_person(
person: PersonCreate, persons_service: PersonService = Depends(get_persons_service)
) -> models.Person:
return persons_service.create(person)
@router.post('/batch', response_model=List[schemas.Person])
async def batch_list_persons(
request: Dict = {},
persons_service: PersonService = Depends(get_persons_service)
) -> List[models.Person]:
return persons_service.batch_get(request)

View File

@@ -1,10 +1,10 @@
from typing import Any, List
from typing import Any, List, Dict
from sqlalchemy.orm import Session
from personal_info.db.models import Person, Address, Document, Contact
from personal_info.db.schemas import PersonCreate, PersonBase
from personal_info.db import models
from personal_info.services.base import BaseService
class PersonService(BaseService[Person, PersonCreate, Any]):
@@ -19,8 +19,6 @@ class PersonService(BaseService[Person, PersonCreate, Any]):
return objs
def create(self, obj: PersonCreate) -> Person:
print('= raw' * 3 )
print(obj)
person_obj = PersonBase(**obj.dict())
person = super(PersonService, self).create(person_obj)
@@ -44,3 +42,11 @@ class PersonService(BaseService[Person, PersonCreate, Any]):
return person
def batch_get(self, request: Dict) -> List[models.Person]:
if request["ids"] is None:
HTTPException(status_code=404, detail='ids required')
objs: List[models.Person] = self.db_session.query(models.Person).filter(models.Person.id.in_(request["ids"])).all()
return objs