Files
break a795ca3650
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m25s
修复通知
2026-08-11 11:18:11 +08:00

46 lines
1.3 KiB
Go

// Package packageexpiry 编排每日套餐临期提醒用例。
package packageexpiry
import (
"context"
"github.com/break/junhong_cmp_fiber/internal/model/dto"
"github.com/break/junhong_cmp_fiber/pkg/errors"
)
// ReminderScanner 查询当天临期资产。
type ReminderScanner interface {
ReminderCandidates(ctx context.Context) ([]dto.ExpiringAssetItem, error)
}
// ReminderPublisher 批量发布个人客户临期通知。
type ReminderPublisher interface {
Publish(ctx context.Context, candidates []dto.ExpiringAssetItem) error
}
// ReminderService 扫描并发布每日套餐临期提醒。
type ReminderService struct {
scanner ReminderScanner
publisher ReminderPublisher
}
// NewReminderService 创建套餐临期提醒用例。
func NewReminderService(scanner ReminderScanner, publisher ReminderPublisher) *ReminderService {
return &ReminderService{scanner: scanner, publisher: publisher}
}
// Run 执行当天临期扫描并可靠发布通知。
func (s *ReminderService) Run(ctx context.Context) error {
if s == nil || s.scanner == nil || s.publisher == nil {
return errors.New(errors.CodeInternalError, "套餐临期提醒用例未配置")
}
candidates, err := s.scanner.ReminderCandidates(ctx)
if err != nil {
return err
}
if len(candidates) == 0 {
return nil
}
return s.publisher.Publish(ctx, candidates)
}