119 lines
4.4 KiB
Python
119 lines
4.4 KiB
Python
# Importações de bibliotecas padrão
|
|
from typing import Union, List, Literal, Annotated, Optional
|
|
from uuid import UUID
|
|
|
|
# Importações de bibliotecas de terceiros
|
|
from pydantic import BaseModel, Field, ConfigDict, EmailStr
|
|
from app.schemas.utils import UUIDSchema
|
|
from app.schemas.endereco_schemas import EnderecoCreate, EnderecoRequest, EnderecoBaseUpdate
|
|
|
|
|
|
class PessoaPayload(BaseModel):
|
|
model_config = ConfigDict(from_attributes=True)
|
|
pessoa_status: bool = Field(default=True)
|
|
pessoa_telefone: str = Field(min_length=8, max_length=20)
|
|
pessoa_celular: str = Field(min_length=9, max_length=20)
|
|
pessoa_email: EmailStr = Field(min_length=8, max_length=50)
|
|
pessoa_local_evento: bool = Field(default=False)
|
|
|
|
|
|
class FisicaCreate(PessoaPayload):
|
|
pessoa_tipo: Literal["1"]
|
|
fisica_cpf: str = Field(min_length=11, max_length=11) # Em produção usar validadores prontos
|
|
fisica_rg: str = Field(min_length=5, max_length=20)
|
|
fisica_genero: Literal["M", "F", "HT", "MT", "T", "NB", "O"]
|
|
fisica_nome: str = Field(min_length=3, max_length=100)
|
|
enderecos: List[EnderecoCreate] | None = None
|
|
rc: List[UUIDSchema] | None = None
|
|
|
|
|
|
class JuridicaCreate(PessoaPayload):
|
|
pessoa_tipo: Literal["0"]
|
|
juridica_cnpj: str = Field(min_length=14, max_length=14) # Em produção usar validadores prontos
|
|
juridica_email_fiscal: EmailStr = Field(min_length=8, max_length=50)
|
|
juridica_insc_est: Optional[Annotated[str, Field(min_length=5, max_length=50)]] = None
|
|
juridica_ins_mun: Optional[Annotated[str, Field(min_length=5, max_length=50)]] = None
|
|
juridica_razao_social: str = Field(min_length=5, max_length=200)
|
|
juridica_representante: str = Field(min_length=3, max_length=100)
|
|
enderecos: List[EnderecoCreate] | None = None
|
|
rc: List[UUIDSchema] | None = None
|
|
|
|
|
|
class PessoaBaseResponse(BaseModel):
|
|
model_config = ConfigDict(from_attributes=True)
|
|
uuid: UUID
|
|
pessoa_status: bool
|
|
pessoa_telefone: str | None = None
|
|
pessoa_celular: str | None = None
|
|
pessoa_email: str | None = None
|
|
pessoa_local_evento: bool
|
|
|
|
|
|
class RequestPJ(PessoaBaseResponse):
|
|
pessoa_tipo: Literal["0"]
|
|
juridica_cnpj: str | None = None
|
|
juridica_email_fiscal: str | None = None
|
|
juridica_insc_est: str | None = None
|
|
juridica_ins_mun: str | None = None
|
|
juridica_razao_social: str | None = None
|
|
juridica_representante: str | None = None
|
|
enderecos: List[EnderecoRequest] = []
|
|
|
|
|
|
|
|
class RequestPF(PessoaBaseResponse):
|
|
pessoa_tipo: Literal["1"]
|
|
fisica_cpf: str | None = None
|
|
fisica_rg: str | None = None
|
|
fisica_genero: str | None = None
|
|
fisica_nome: str
|
|
enderecos: List[EnderecoRequest] = []
|
|
|
|
|
|
|
|
RequestPessoa = Annotated[
|
|
Union[RequestPF, RequestPJ],
|
|
Field(discriminator='pessoa_tipo')
|
|
]
|
|
|
|
|
|
class IdRequestPessoa(BaseModel):
|
|
uuid: UUID = None
|
|
|
|
|
|
class IdsRequestPessoas(BaseModel):
|
|
uuids: List[UUID] = None
|
|
|
|
|
|
class PessoaBaseUpdate(IdRequestPessoa):
|
|
pessoa_status: bool
|
|
pessoa_telefone: Optional[Annotated[str, Field(min_length=8, max_length=20)]] = None
|
|
pessoa_celular: Optional[Annotated[str, Field(min_length=8, max_length=20)]] = None
|
|
pessoa_email: Optional[Annotated[EmailStr, Field(min_length=8, max_length=50)]] = None
|
|
pessoa_local_evento: bool
|
|
pessoa_tipo: Optional[Literal["0", "1"]] = None
|
|
|
|
|
|
class PessoaFisicaUpdate(PessoaBaseUpdate):
|
|
fisica_cpf: str = Field(min_length=11, max_length=11)
|
|
fisica_rg: Optional[Annotated[str, Field(min_length=5, max_length=20)]] = None
|
|
fisica_genero: Optional[Literal["M", "F", "HT", "MT", "T", "NB", "O"]] = None
|
|
fisica_nome: Optional[Annotated[str, Field(min_length=3, max_length=100)]] = None
|
|
enderecos: List[EnderecoBaseUpdate] | None = None
|
|
rc: List[UUIDSchema] | None = None
|
|
|
|
|
|
class PessoaJuridicaUpdate(PessoaBaseUpdate):
|
|
juridica_cnpj: str = Field(min_length=14, max_length=14)
|
|
juridica_email_fiscal: Optional[Annotated[EmailStr, Field(min_length=8, max_length=50)]] = None
|
|
juridica_insc_est: Optional[Annotated[str, Field(min_length=5, max_length=50)]] = None
|
|
juridica_ins_mun: Optional[Annotated[str, Field(min_length=5, max_length=50)]] = None
|
|
juridica_razao_social: Optional[Annotated[str, Field(min_length=5, max_length=200)]] = None
|
|
juridica_representante: Optional[Annotated[str, Field(min_length=3, max_length=100)]] = None
|
|
enderecos: List[EnderecoBaseUpdate] | None = None
|
|
rc: List[UUIDSchema] | None = None
|
|
|
|
|
|
class ValidaGetAll(BaseModel):
|
|
validador: Literal["0", "1"] | None = None
|