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

134 lines
5.2 KiB
Go
Raw Normal View History

2025-03-21 03:12:41 +00:00
package usecase
import (
"context"
2025-04-06 02:08:46 +00:00
"code.30cm.net/digimon/app-cloudep-product-service/pkg/domain/product"
2025-03-21 03:12:41 +00:00
)
type ProductUseCase interface {
2025-04-06 02:08:46 +00:00
Base
2025-03-21 03:12:41 +00:00
// IncOrders 新增訂單數
IncOrders(ctx context.Context, productID string, count int64) error
// DecOrders 減少訂單數。-> 退貨時專用
DecOrders(ctx context.Context, productID string, count int64) error
// UpdateAverageRating 只更新綜合評價及其更新時間
UpdateAverageRating(ctx context.Context, productID string, averageRating float64) error
// IncFansCount 新增粉絲數
IncFansCount(ctx context.Context, productID string, fansCount uint64) error
// DecFansCount 減少粉絲數。
DecFansCount(ctx context.Context, productID string, fansCount uint64) error
// BindTag 建立一筆 tag 與其他資料(例如專案)的綁定關係
BindTag(ctx context.Context, binding TagsBindingTable) error
// UnbindTag 刪除一筆綁定資料
UnbindTag(ctx context.Context, binding TagsBindingTable) error
// GetBindingsByReference 根據參照 ID 取得所有綁定資料
GetBindingsByReference(ctx context.Context, referenceID string) ([]TagsBindingTableResp, error)
// ListTagBinding 根據查詢條件取得 tag binding 的資料列表
ListTagBinding(ctx context.Context, params TagBindingQueryParams) ([]TagsBindingTableResp, int64, error)
}
2025-04-06 02:08:46 +00:00
type Base interface {
Create(ctx context.Context, product *Product) error
Update(ctx context.Context, id string, product *Product) error
Delete(ctx context.Context, id string) error
Get(ctx context.Context, id string) (*ProductResp, error)
List(ctx context.Context, data ProductQueryParams) ([]*ProductResp, int64, error)
}
2025-03-21 03:12:41 +00:00
type Product struct {
UID *string // 專案擁有者 UID
Title *string // 專案名稱
ShortTitle *string // 計畫簡短標題 -> 不一定要有
Details *string // 詳細內容
ShortDescription *string // 簡短描述
Media []Media // 專案動態內容(圖片或者影片)
Slug *string // URL 後綴(查詢用)
IsPublished *bool // 是否已上架
Amount uint64 // 目標金額
StartTime *string // 專案開始時間
EndTime *string // 專案結束時間
Category *string // 類別
CustomFields []CustomFields // 自定義屬性
Tags []string // 這個專案專屬的 tagID
}
type ProductResp struct {
ID string
UID string // 專案擁有者 UID
Title string // 專案名稱
ShortTitle string // 計畫簡短標題 -> 不一定要有
Details string // 詳細內容
ShortDescription string // 簡短描述
Media []Media // 專案動態內容(圖片或者影片)
Slug string // URL 後綴(查詢用)
IsPublished bool // 是否已上架
Amount uint64 // 目標金額
StartTime string // 專案開始時間
EndTime string // 專案結束時間
Category string // 類別
CustomFields []CustomFields // 自定義屬性
Tags []Tags // 這個專案專屬的 tagID
Orders uint64 // 總接單數
OrdersUpdateTime string // 更新總接單數的時間
AverageRating float64 // 綜合評價4.5 顆星)
AverageRatingUpdateTime string // 更新評價的時間
FansCount uint64 // 追蹤數量
FansCountUpdateTime string // 更新追蹤的時間
UpdatedAt string // 更新時間
CreatedAt string // 建立時間
}
type Media struct {
Sort uint64
Type string
URL string
}
type CustomFields struct {
Key string `bson:"key"`
Value string `bson:"value"`
}
type ProductQueryParams struct {
UID *string // 專案擁有者 UID
IsPublished *bool // 是否已上架
Category *string // 類別
StartTime *int64 // 起始時間Unix 時間戳)
EndTime *int64 // 結束時間Unix 時間戳)
Slug *string // URL 後綴
PageIndex int64 // 頁碼
PageSize int64 // 每頁數量
}
type Tags struct {
ID string // 專案 ID
Types product.ItemType // Tag 類型
Name string // tag 名稱
ShowType product.ShowType // 顯示筐
Cover string // 封面圖片
UpdatedAt string // 更新時間
CreatedAt string // 創建時間
}
type TagsBindingTable struct {
ReferenceID string // 參照 id (可能為專案或其他的東西)
TagID string // tag id
}
type TagsBindingTableResp struct {
ID string
ReferenceID string // 參照 id (可能為專案或其他的東西)
TagID string // tag id
UpdatedAt string // 更新時間
CreatedAt string // 創建時間
}
// TagBindingQueryParams 為查詢 TagBindingTable 時的參數結構
type TagBindingQueryParams struct {
ReferenceID *string // 過濾參照 ID
TagID *string // 過濾 Tag ID
PageSize int64
PageIndex int64
}