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 import BaseModel, Field, ConfigDict
|
||||||
from pydantic.types import UUID4
|
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):
|
class PersonBase(BaseModel):
|
||||||
first_name: str
|
first_name: str
|
||||||
@@ -56,6 +49,19 @@ class PersonCreate(PersonBase):
|
|||||||
photos: Optional[List[str]] = []
|
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):
|
class PersonDetail(Person):
|
||||||
id: UUID4
|
id: UUID4
|
||||||
first_name: str
|
first_name: str
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
from fastapi import Depends, Request
|
from fastapi import Depends, Request
|
||||||
from fastapi.routing import APIRouter
|
from fastapi.routing import APIRouter
|
||||||
from pydantic.types import UUID4
|
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.db.schemas import Person, PersonDetail, PersonCreate
|
||||||
from personal_info.services import PersonService, get_persons_service
|
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)
|
person: PersonCreate, persons_service: PersonService = Depends(get_persons_service)
|
||||||
) -> models.Person:
|
) -> 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 sqlalchemy.orm import Session
|
||||||
|
|
||||||
from personal_info.db.models import Person, Address, Document, Contact
|
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
|
||||||
|
from personal_info.db import models
|
||||||
from personal_info.services.base import BaseService
|
from personal_info.services.base import BaseService
|
||||||
|
|
||||||
class PersonService(BaseService[Person, PersonCreate, Any]):
|
class PersonService(BaseService[Person, PersonCreate, Any]):
|
||||||
@@ -19,8 +19,6 @@ class PersonService(BaseService[Person, PersonCreate, Any]):
|
|||||||
return objs
|
return objs
|
||||||
|
|
||||||
def create(self, obj: PersonCreate) -> Person:
|
def create(self, obj: PersonCreate) -> Person:
|
||||||
print('= raw' * 3 )
|
|
||||||
print(obj)
|
|
||||||
person_obj = PersonBase(**obj.dict())
|
person_obj = PersonBase(**obj.dict())
|
||||||
person = super(PersonService, self).create(person_obj)
|
person = super(PersonService, self).create(person_obj)
|
||||||
|
|
||||||
@@ -44,3 +42,11 @@ class PersonService(BaseService[Person, PersonCreate, Any]):
|
|||||||
|
|
||||||
return person
|
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