91 lines
1.7 KiB
Python
91 lines
1.7 KiB
Python
from datetime import date
|
|
from typing import List, Optional
|
|
|
|
from pydantic import BaseModel, Field, ConfigDict
|
|
from pydantic.types import UUID4
|
|
|
|
class PersonBase(BaseModel):
|
|
first_name: str
|
|
last_name: str
|
|
patronymic: Optional[str]
|
|
gender: Optional[str]
|
|
birth_date: Optional[date]
|
|
|
|
class Config:
|
|
validate_assignment=True
|
|
revalidate_instances='always'
|
|
orm_mode = True
|
|
# extra='ignore'
|
|
|
|
|
|
|
|
class AddressCreate(BaseModel):
|
|
category: str
|
|
region: Optional[str]
|
|
city: Optional[str]
|
|
street: Optional[str]
|
|
house: Optional[str]
|
|
flat: Optional[str]
|
|
|
|
class ContactCreate(BaseModel):
|
|
category: str
|
|
value: str
|
|
|
|
class DocumentCreate(BaseModel):
|
|
category: str
|
|
series: str
|
|
number: str
|
|
issued_by: str
|
|
issued_at: Optional[date]
|
|
attachments: Optional[List[str]]
|
|
|
|
class PersonCreate(PersonBase):
|
|
|
|
addresses: Optional[List[AddressCreate]] = []
|
|
contacts: Optional[List[ContactCreate]] = []
|
|
documents: Optional[List[DocumentCreate]] = []
|
|
photos: Optional[List[str]] = []
|
|
|
|
|
|
class Contact(BaseModel):
|
|
category: str
|
|
value: str
|
|
class Config:
|
|
orm_mode = True
|
|
|
|
class Address(BaseModel):
|
|
category: str
|
|
region: str
|
|
city: str
|
|
street: str
|
|
house: str
|
|
flat: str
|
|
class Config:
|
|
orm_mode = True
|
|
class Document(BaseModel):
|
|
category: str
|
|
series: str
|
|
number: str
|
|
issued_by: str
|
|
issued_at: str
|
|
attachments: List[str]
|
|
class Config:
|
|
orm_mode = True
|
|
|
|
class Person(BaseModel):
|
|
id: UUID4
|
|
first_name: str
|
|
last_name: str
|
|
patronymic: Optional[str]
|
|
birth_date: Optional[date]
|
|
contacts: Optional[List[Contact]] = []
|
|
addresses: Optional[List[Address]] = []
|
|
documents: Optional[List[Document]] = []
|
|
|
|
class Config:
|
|
orm_mode = True
|
|
|
|
class PersonDetail(Person):
|
|
id: UUID4
|
|
first_name: str
|
|
last_name: str |