app-cloudep-product-service/pkg/domain/usecase/product_item.go

74 lines
3.9 KiB
Go

package usecase
import (
"context"
"code.30cm.net/digimon/app-cloudep-product-service/pkg/domain/product"
)
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, ids []string) error
// List 列出符合條件的商品,可根據需求加入分頁或其他條件參數
List(ctx context.Context, filter QueryProductItemParam) ([]*ProductItems, int64, error)
// DeleteByReferenceID 刪除某Project 下所有
DeleteByReferenceID(ctx context.Context, id string) 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 int64 `json:"updated_at"` // 更新時間
CreatedAt int64 `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 // 商品狀態
}