VIP Person Batch query
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -28,4 +28,11 @@ async def get_person(
|
||||
async def create_person(
|
||||
person: PersonCreate, persons_service: PersonService = Depends(get_persons_service)
|
||||
) -> models.Person:
|
||||
return persons_service.create(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)
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user