""" 产品模块请求模型 定义产品及产品分类管理相关的请求体数据模型,供 products 路由使用。 包含产品分类的创建/更新、产品的创建/更新,以及产品规格的更新操作。 """ from pydantic import BaseModel, Field class CreateCategoryRequest(BaseModel): """创建产品分类请求体。被 POST /api/products/categories 路由使用。""" category_name: str """分类名称""" category_code: str """分类编码""" sort_no: int = 0 """排序号,数值越小越靠前""" status: int = 1 """状态:1-启用,0-禁用""" remark: str | None = None """备注信息""" class UpdateCategoryRequest(BaseModel): """更新产品分类请求体。被 PUT /api/products/categories/{id} 路由使用。""" category_name: str """分类名称""" category_code: str """分类编码""" sort_no: int = 0 """排序号""" status: int = 1 """状态:1-启用,0-禁用""" remark: str | None = None """备注信息""" class ProductSpecificationPayload(BaseModel): """产品规格载荷,用于创建产品时携带规格信息。""" specification: str """规格名称(如尺寸、型号等)""" unit: str """计量单位(如个、箱、米等)""" category_id: int | None = None """关联分类 ID""" cost_price: float = 0 """成本价""" sale_price: float = 0 """销售价""" status: int = 1 """状态:1-启用,0-禁用""" remark: str | None = None """备注信息""" is_default: bool = False """是否为默认规格""" class CreateProductRequest(BaseModel): """创建产品请求体。被 POST /api/products 路由使用。""" product_name: str """产品名称""" category_id: int | None = None """所属分类 ID""" status: int = 1 """状态:1-启用,0-禁用""" remark: str | None = None """备注信息""" specifications: list[ProductSpecificationPayload] = Field(default_factory=list) """产品规格列表,支持创建时同时创建多个规格""" class UpdateProductRequest(BaseModel): """更新产品基本信息请求体。被 PUT /api/products/{id} 路由使用。""" product_name: str """产品名称""" category_id: int | None = None """所属分类 ID""" status: int = 1 """状态:1-启用,0-禁用""" remark: str | None = None """备注信息""" class UpdateProductSpecificationRequest(BaseModel): """更新产品规格请求体。被 PUT /api/products/specifications/{id} 路由使用。""" specification: str """规格名称""" unit: str """计量单位""" category_id: int | None = None """关联分类 ID""" cost_price: float = 0 """成本价""" sale_price: float = 0 """销售价""" status: int = 1 """状态:1-启用,0-禁用""" remark: str | None = None """备注信息""" is_default: bool = False """是否为默认规格""" class UpdateProductCategoryRequest(BaseModel): """更新产品分类请求体。被 PUT /api/products/categories/{id} 路由使用。""" category_name: str """分类名称""" category_code: str """分类编码""" sort_no: int = 0 """排序号""" status: int = 1 """状态:1-启用,0-禁用""" remark: str | None = None """备注信息"""