package usecase import ( "code.30cm.net/digimon/app-cloudep-product-service/pkg/domain/entity" "code.30cm.net/digimon/app-cloudep-product-service/pkg/domain/repository" "code.30cm.net/digimon/app-cloudep-product-service/pkg/domain/usecase" "context" "google.golang.org/protobuf/proto" ) type ProductUseCaseParam struct { ProductRepo repository.ProductRepository TagRepo repository.TagRepo TagBinding repository.TagBindingRepo ProductStatisticsRepo repository.ProductStatisticsRepo } type ProductUseCase struct { ProductUseCaseParam } func MustProductUseCase(param ProductUseCaseParam) usecase.ProductUseCase { return &ProductUseCase{ param, } } func (use *ProductUseCase) Create(ctx context.Context, product *usecase.Product) error { //use.ProductRepo.Transaction() insert := &entity.Product{ UID: *product.UID, Title: *product.Title, ShortTitle: product.ShortTitle, } UID string `bson:"uid"` // 專案擁有者 UID Title string `bson:"title"` // 專案名稱 ShortTitle *string `bson:"short_title,omitempty"` // 計畫簡短標題 -> 不一定要有 Details *string `bson:"details"` // 詳細內容 ShortDescription string `bson:"short_description,omitempty"` // 簡短描述 Media []Media `bson:"media,omitempty"` // 專案動態內容(圖片或者影片) Slug *string `bson:"slug,omitempty"` // URL 後綴(查詢用) IsPublished bool `bson:"is_published" ` // 是否已上架 Amount uint64 `bson:"amount,omitempty"` // 目標金額 StartTime *int64 `bson:"start_time,omitempty"` // 專案開始時間 EndTime *int64 `bson:"end_time,omitempty"` // 專案結束時間 Category string `bson:"category"` // 類別 CustomFields []CustomFields `bson:"custom_fields,omitempty"` // 自定義屬性 err := use.ProductRepo.Insert(ctx, insert) if err != nil { return err } //TODO implement me panic("implement me") } func (use *ProductUseCase) Update(ctx context.Context, id string, product *usecase.Product) error { //TODO implement me panic("implement me") } func (use *ProductUseCase) Delete(ctx context.Context, id string) error { //TODO implement me panic("implement me") } func (use *ProductUseCase) Get(ctx context.Context, id string) (*usecase.ProductResp, error) { //TODO implement me panic("implement me") } func (use *ProductUseCase) List(ctx context.Context, data usecase.ProductQueryParams) ([]*usecase.ProductResp, int64, error) { //TODO implement me panic("implement me") } func (use *ProductUseCase) IncOrders(ctx context.Context, productID string, count int64) error { //TODO implement me panic("implement me") } func (use *ProductUseCase) DecOrders(ctx context.Context, productID string, count int64) error { //TODO implement me panic("implement me") } func (use *ProductUseCase) UpdateAverageRating(ctx context.Context, productID string, averageRating float64) error { //TODO implement me panic("implement me") } func (use *ProductUseCase) IncFansCount(ctx context.Context, productID string, fansCount uint64) error { //TODO implement me panic("implement me") } func (use *ProductUseCase) DecFansCount(ctx context.Context, productID string, fansCount uint64) error { //TODO implement me panic("implement me") } func (use *ProductUseCase) BindTag(ctx context.Context, binding usecase.TagsBindingTable) error { //TODO implement me panic("implement me") } func (use *ProductUseCase) UnbindTag(ctx context.Context, binding usecase.TagsBindingTable) error { //TODO implement me panic("implement me") } func (use *ProductUseCase) GetBindingsByReference(ctx context.Context, referenceID string) ([]usecase.TagsBindingTableResp, error) { //TODO implement me panic("implement me") } func (use *ProductUseCase) ListTagBinding(ctx context.Context, params usecase.TagBindingQueryParams) ([]usecase.TagsBindingTableResp, int64, error) { //TODO implement me panic("implement me") }