Files
Fulfillment-Backend/schemas/client.py
2025-07-18 19:28:08 +04:00

97 lines
1.9 KiB
Python

from typing import List, Optional
from pydantic import field_validator
from schemas.barcode import BarcodeTemplateSchema
from schemas.base import BaseSchema, OkMessageSchema
from schemas.chat import ChatSchema
from schemas.residues import ResidualBoxSchema, ResidualPalletSchema
# region Entities
class ClientDetailsSchema(BaseSchema):
telegram: str | None = None
phone_number: str | None = None
inn: str | None = None
email: str | None = None
@field_validator("phone_number", "inn", "email", "telegram", mode="before")
def empty_string_to_none(cls, v):
return '' if v is None else v
class ClientSchema(BaseSchema):
id: int
name: str
company_name: str
barcode_template: BarcodeTemplateSchema | None = None
comment: Optional[str] = None
details: ClientDetailsSchema | None = None
chat: ChatSchema | None = None
is_deleted: bool | None = False
class ClientDetailedSchema(ClientSchema):
pallets: List[ResidualPalletSchema] = []
boxes: List[ResidualBoxSchema] = []
# endregion
# region Requests
class ClientSearchRequest(BaseSchema):
name: str
class ClientUpdateDetailsRequest(BaseSchema):
client_id: int
details: ClientDetailsSchema
class ClientCreateRequest(BaseSchema):
data: ClientSchema
class ClientUpdateRequest(BaseSchema):
data: ClientSchema
class ClientDeleteRequest(BaseSchema):
client_id: int
# endregion
# region Responses
class ClientSearchResponse(BaseSchema):
clients: List[ClientSchema]
class ClientUpdateDetailsResponse(BaseSchema):
ok: bool
class ClientGetAllResponse(BaseSchema):
clients: List[ClientSchema]
class ClientGetResponse(BaseSchema):
client: ClientDetailedSchema
class ClientCreateResponse(OkMessageSchema):
pass
class ClientUpdateResponse(OkMessageSchema):
pass
class ClientDeleteResponse(OkMessageSchema):
pass
class CreateGuestUrlResponse(OkMessageSchema):
url: str
# endregion