package usecase import ( "code.30cm.net/digimon/app-cloudep-product-service/pkg/domain/product" "context" ) type ProductItemUseCase interface { // Create 新增單筆商品 Create(ctx context.Context, productItem *ProductItems) error // Get 根據 ID 查詢單筆商品 Get(ctx context.Context, id string) (*ProductItems, error) // Update 更新商品資訊 Update(ctx context.Context, id string, productItem *UpdateProductItems) error // UpdateStatus 更新商品資訊 UpdateStatus(ctx context.Context, id string, status product.ItemStatus) error // IncSalesCount 更新商品資訊 IncSalesCount(ctx context.Context, id string, saleCount uint64) error // DecSalesCount 更新商品資訊 DecSalesCount(ctx context.Context, id string, saleCount uint64) error // Delete ID 刪除商品 Delete(ctx context.Context, id string) error // List 列出符合條件的商品,可根據需求加入分頁或其他條件參數 List(ctx context.Context, filter QueryProductItemParam) ([]*ProductItems, int64, error) } type ProductItems struct { ID string `json:"_id,omitempty"` // 專案 ID ReferenceID string `json:"reference_id"` // 對應的專案 ID Name string `json:"name"` // 名稱 Description string `json:"description"` // 描述 ShortDescription string `json:"short_description"` // 封面簡短描述 IsUnLimit bool `json:"is_un_limit"` // 是否沒有數量上限 IsFree bool `json:"is_free"` // 是否為免費品項(贈品) -> 開啟就是自訂金額 Stock uint64 `json:"stock"` // 庫存總數 Price string `json:"price"` // 價格 SKU string `json:"sku"` // 型號:對應顯示 Item 的 FK TimeSeries product.TimeSeries `json:"time_series"` // 時段種類 Media []Media `json:"media,omitempty"` // 專案動態內容(圖片或者影片) Status product.ItemStatus `json:"status"` // 商品狀態 Freight []CustomFields `json:"freight,omitempty"` // 運費 CustomFields []CustomFields `json:"custom_fields,omitempty"` // 自定義屬性 SalesCount uint64 `json:"sales_count" ` // 已賣出數量(相反,減到零就不能在賣) UpdatedAt string `json:"updated_at"` // 更新時間 CreatedAt string `json:"created_at"` // 創建時間 } type UpdateProductItems struct { Name *string // 名稱 Description *string // 描述 ShortDescription *string // 封面簡短描述 IsUnLimit *bool // 是否沒有數量上限 IsFree *bool // 是否為免費品項(贈品) -> 開啟就是自訂金額 Stock *uint64 // 庫存總數 Price *string // 價格 SKU *string // 型號:對應顯示 Item 的 FK TimeSeries *product.TimeSeries // 時段種類 Media []Media // 專案動態內容(圖片或者影片) Freight []CustomFields // 運費 CustomFields []CustomFields // 自定義屬性 } type QueryProductItemParam struct { PageSize int64 PageIndex int64 ReferenceID *string // 對應的專案 ID IsUnLimit *bool // 是否沒有數量上限 IsFree *bool // 是否為免費品項(贈品) -> 開啟就是自訂金額 Status *product.ItemStatus // 商品狀態 }