"""商品 Pydantic 模型(列表 / 详情 / 部分更新)。""" from __future__ import annotations from datetime import datetime from uuid import UUID from pydantic import BaseModel, ConfigDict, Field class ProductListItem(BaseModel): model_config = ConfigDict(from_attributes=True) id: UUID stage: str name: str = "" offer_id: str = "" price: float | None = None currency_code: str = "RUB" source_platform: str | None = None source_url: str | None = None asset_counts: dict | None = None ozon_product_id: int | None = None created_at: datetime updated_at: datetime class ProductDetail(BaseModel): model_config = ConfigDict(from_attributes=True) id: UUID shop_id: UUID | None = None stage: str source_platform: str | None = None source_item_id: str | None = None source_url: str | None = None offer_id: str = "" ozon_product_id: int | None = None name: str = "" description: str = "" description_category_id: int | None = None type_id: int | None = None price: float | None = None old_price: float | None = None currency_code: str = "RUB" vat: str = "0" depth: float | None = None width: float | None = None height: float | None = None dimension_unit: str = "mm" weight: float | None = None weight_unit: str = "g" barcode: str | None = None images: list | None = None primary_image: str | None = None images360: list | None = None color_image: str | None = None attributes: list | None = None complex_attributes: list | None = None raw: dict | None = None pricing: dict | None = None copy: dict | None = None fx_rate: float | None = None asset_counts: dict | None = None published_at: datetime | None = None created_at: datetime updated_at: datetime class ProductUpdate(BaseModel): """编辑页 autosave 的部分更新。仅允许业务字段,id/时间由服务端维护。""" shop_id: UUID | None = None stage: str | None = None offer_id: str | None = None name: str | None = None description: str | None = None description_category_id: int | None = None type_id: int | None = None price: float | None = None old_price: float | None = None currency_code: str | None = None vat: str | None = None depth: float | None = None width: float | None = None height: float | None = None dimension_unit: str | None = None weight: float | None = None weight_unit: str | None = None barcode: str | None = None images: list | None = None primary_image: str | None = None attributes: list | None = None complex_attributes: list | None = None raw: dict | None = None pricing: dict | None = None copy: dict | None = None fx_rate: float | None = None source_url: str | None = None