package repository import ( "context" "code.30cm.net/digimon/app-cloudep-product-service/pkg/domain/entity" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" ) // ProductRepository 存取 Product 的地方 type ProductRepository interface { Insert(ctx context.Context, data *entity.Product) error FindOneByID(ctx context.Context, id string) (*entity.Product, error) FindOneBySlug(ctx context.Context, slug string) (*entity.Product, error) Update(ctx context.Context, productID string, data *ProductUpdateParams) (*mongo.UpdateResult, error) Delete(ctx context.Context, id string) error ListProduct(ctx context.Context, params *ProductQueryParams) ([]*entity.Product, int64, error) Transaction(ctx context.Context, fn func(sessCtx mongo.SessionContext) (any, error), opts ...*options.TransactionOptions) error ProductIndex } type ProductIndex interface { Index20250317001UP(ctx context.Context) (*mongo.Cursor, error) } // ProductQueryParams 用於查詢專案的參數 type ProductQueryParams struct { UID *string // 專案擁有者 UID IsPublished *bool // 是否已上架 Category *string // 類別 StartTime *int64 // 起始時間(Unix 時間戳) EndTime *int64 // 結束時間(Unix 時間戳) Slug *string // URL 後綴 PageIndex int64 // 頁碼 PageSize int64 // 每頁數量 } // ProductUpdateParams 用於更新專案的參數 type ProductUpdateParams struct { Title *string ShortTitle *string Details *string ShortDescription string Media []entity.Media Category *string Slug *string IsPublished *bool Amount *uint64 StartTime *int64 EndTime *int64 CustomFields []entity.CustomFields }