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