Files
junhong_cmp_fiber/internal/polling/data_reset_handler.go
huang 353621d923
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 6m33s
移除所有测试代码和测试要求
**变更说明**:
- 删除所有 *_test.go 文件(单元测试、集成测试、验收测试、流程测试)
- 删除整个 tests/ 目录
- 更新 CLAUDE.md:用"测试禁令"章节替换所有测试要求
- 删除测试生成 Skill (openspec-generate-acceptance-tests)
- 删除测试生成命令 (opsx:gen-tests)
- 更新 tasks.md:删除所有测试相关任务

**新规范**:
-  禁止编写任何形式的自动化测试
-  禁止创建 *_test.go 文件
-  禁止在任务中包含测试相关工作
-  仅当用户明确要求时才编写测试

**原因**:
业务系统的正确性通过人工验证和生产环境监控保证,测试代码维护成本高于价值。

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-11 17:13:42 +08:00

117 lines
2.9 KiB
Go

package polling
import (
"context"
"time"
"go.uber.org/zap"
packagepkg "github.com/break/junhong_cmp_fiber/internal/service/package"
)
// DataResetHandler 流量重置调度处理器
// 任务 20: 定期检查需要重置的套餐并调用 ResetService 执行重置
type DataResetHandler struct {
resetService *packagepkg.ResetService
logger *zap.Logger
// 上次执行时间(用于限流,避免重复执行)
lastDailyReset time.Time
lastMonthlyReset time.Time
lastYearlyReset time.Time
}
// NewDataResetHandler 创建流量重置调度处理器
func NewDataResetHandler(
resetService *packagepkg.ResetService,
logger *zap.Logger,
) *DataResetHandler {
return &DataResetHandler{
resetService: resetService,
logger: logger,
}
}
// HandleDataReset 任务 20.2: 处理流量重置调度
// 每 10 秒被 Scheduler 调用一次,检查是否需要执行日/月/年重置
func (h *DataResetHandler) HandleDataReset(ctx context.Context) error {
now := time.Now()
// 任务 20.3: 日重置调度(每分钟检查一次,避免频繁查询数据库)
if now.Sub(h.lastDailyReset) >= time.Minute {
if err := h.processDailyReset(ctx); err != nil {
h.logger.Warn("日重置调度失败", zap.Error(err))
}
h.lastDailyReset = now
}
// 任务 20.4: 月重置调度(每分钟检查一次)
if now.Sub(h.lastMonthlyReset) >= time.Minute {
if err := h.processMonthlyReset(ctx); err != nil {
h.logger.Warn("月重置调度失败", zap.Error(err))
}
h.lastMonthlyReset = now
}
// 任务 20.5: 年重置调度(每分钟检查一次)
if now.Sub(h.lastYearlyReset) >= time.Minute {
if err := h.processYearlyReset(ctx); err != nil {
h.logger.Warn("年重置调度失败", zap.Error(err))
}
h.lastYearlyReset = now
}
return nil
}
// processDailyReset 任务 20.3: 日重置调度
func (h *DataResetHandler) processDailyReset(ctx context.Context) error {
if h.resetService == nil {
return nil
}
startTime := time.Now()
if err := h.resetService.ResetDailyUsage(ctx); err != nil {
return err
}
h.logger.Info("日重置调度完成",
zap.Duration("duration", time.Since(startTime)))
return nil
}
// processMonthlyReset 任务 20.4: 月重置调度
func (h *DataResetHandler) processMonthlyReset(ctx context.Context) error {
if h.resetService == nil {
return nil
}
startTime := time.Now()
if err := h.resetService.ResetMonthlyUsage(ctx); err != nil {
return err
}
h.logger.Info("月重置调度完成",
zap.Duration("duration", time.Since(startTime)))
return nil
}
// processYearlyReset 任务 20.5: 年重置调度
func (h *DataResetHandler) processYearlyReset(ctx context.Context) error {
if h.resetService == nil {
return nil
}
startTime := time.Now()
if err := h.resetService.ResetYearlyUsage(ctx); err != nil {
return err
}
h.logger.Info("年重置调度完成",
zap.Duration("duration", time.Since(startTime)))
return nil
}