Files
astra-personal-information/src/personal_info/db/schemas/person.py
2023-08-16 20:00:18 +03:00

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