103 lines
2.8 KiB
Python
103 lines
2.8 KiB
Python
"""商品 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
|