from __future__ import annotations from typing import Any, Dict, Literal from pydantic import BaseModel, ConfigDict, Field class PedidoBase(BaseModel): model_config = ConfigDict(populate_by_name=True, extra="forbid") status: Literal["pendente", "aprovado", "entregue", "cancelado"] = Field(alias="status") valor_total: float | None = Field(default=None, ge=0, alias="valor-total") valor_produtos: float | None = Field(default=None, ge=0, alias="valor-produtos") valor_frete: float | None = Field(default=None, ge=0, alias="valor-frete") itens: list[str] = Field(default_factory=list, alias="itens") quantidade: list[int] = Field(default_factory=list, alias="quantidade") pagamentos: str | Dict[str, Any] | None = Field( default=None, alias="pagamentos" ) carrinhos: str | Dict[str, Any] | None = Field(default=None, alias="carrinhos") usuarios: str | Dict[str, Any] | None = Field(default=None, alias="usuarios") faturas: str | Dict[str, Any] | None = Field(default=None, alias="faturas") class PedidoCreate(PedidoBase): pass class PedidoCreateRequest(BaseModel): model_config = ConfigDict(populate_by_name=True, extra="forbid") document_id: str | None = Field(default=None, alias="documentId", min_length=1, max_length=255) data: PedidoCreate = Field(alias="data") class PedidoUpdate(BaseModel): model_config = ConfigDict(populate_by_name=True, extra="forbid") status: Literal["pendente", "aprovado", "entregue", "cancelado"] | None = Field(default=None, alias="status") valor_total: float | None = Field(default=None, ge=0, alias="valor-total") valor_produtos: float | None = Field(default=None, ge=0, alias="valor-produtos") valor_frete: float | None = Field(default=None, ge=0, alias="valor-frete") itens: list[str] | None = Field(default=None, alias="itens") quantidade: list[int] | None = Field(default=None, alias="quantidade") pagamentos: str | Dict[str, Any] | None = Field(default=None, alias="pagamentos") carrinhos: str | Dict[str, Any] | None = Field(default=None, alias="carrinhos") usuarios: str | Dict[str, Any] | None = Field(default=None, alias="usuarios") faturas: str | Dict[str, Any] | None = Field(default=None, alias="faturas") class PedidoStatusUpdate(BaseModel): status: Literal["pendente", "aprovado", "entregue", "cancelado"] class PedidoOut(BaseModel): model_config = ConfigDict(from_attributes=True, populate_by_name=True) id: str = Field(alias="id") status: Literal["pendente", "aprovado", "entregue", "cancelado"] = Field(alias="status") valor_total: float | None = Field(alias="valor-total") valor_produtos: float | None = Field(alias="valor-produtos") valor_frete: float | None = Field(alias="valor-frete") itens: list[str] = Field(alias="itens") quantidade: list[int] = Field(alias="quantidade") pagamentos: str | None = Field(alias="pagamentos") carrinhos: str | None = Field(alias="carrinhos") usuarios: str | None = Field(alias="usuarios") faturas: str | None = Field(alias="faturas") created_at: str = Field(alias="createdAt") updated_at: str = Field(alias="updatedAt")