promo_code_repository.go 1.2 KB

123456789101112131415161718192021222324252627282930
  1. package service
  2. import (
  3. "context"
  4. "github.com/Wei-Shaw/sub2api/internal/pkg/pagination"
  5. )
  6. // PromoCodeRepository 优惠码仓储接口
  7. type PromoCodeRepository interface {
  8. // 基础 CRUD
  9. Create(ctx context.Context, code *PromoCode) error
  10. GetByID(ctx context.Context, id int64) (*PromoCode, error)
  11. GetByCode(ctx context.Context, code string) (*PromoCode, error)
  12. GetByCodeForUpdate(ctx context.Context, code string) (*PromoCode, error) // 带行锁的查询,用于并发控制
  13. Update(ctx context.Context, code *PromoCode) error
  14. Delete(ctx context.Context, id int64) error
  15. // 列表查询
  16. List(ctx context.Context, params pagination.PaginationParams) ([]PromoCode, *pagination.PaginationResult, error)
  17. ListWithFilters(ctx context.Context, params pagination.PaginationParams, status, search string) ([]PromoCode, *pagination.PaginationResult, error)
  18. // 使用记录
  19. CreateUsage(ctx context.Context, usage *PromoCodeUsage) error
  20. GetUsageByPromoCodeAndUser(ctx context.Context, promoCodeID, userID int64) (*PromoCodeUsage, error)
  21. ListUsagesByPromoCode(ctx context.Context, promoCodeID int64, params pagination.PaginationParams) ([]PromoCodeUsage, *pagination.PaginationResult, error)
  22. // 计数操作
  23. IncrementUsedCount(ctx context.Context, id int64) error
  24. }