feat(M3): 申请审批 + 邮件队列 — 公开申请、管理员审批自动建号、mail_logs 落库重试
This commit is contained in:
+20
-8
@@ -1,27 +1,39 @@
|
||||
// Package cron 提供定时任务:过期扫描、回收、审计归档。
|
||||
// M0 注册任务框架(任务函数在 M1/M4 接入),单实例部署说明见 PLAN §11。
|
||||
// Package cron 提供定时任务:邮件重试、过期扫描、回收、审计归档。
|
||||
// M0 注册任务框架(过期扫描/回收在 M1/M4 接入);M3 接入邮件失败重试;
|
||||
// 单实例部署说明见 PLAN §11。
|
||||
package cron
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log/slog"
|
||||
|
||||
"github.com/robfig/cron/v3"
|
||||
"gorm.io/gorm"
|
||||
|
||||
"ws_usernode/internal/mail"
|
||||
)
|
||||
|
||||
// Jobs 聚合定时任务依赖与注册。
|
||||
type Jobs struct {
|
||||
db *gorm.DB
|
||||
log *slog.Logger
|
||||
db *gorm.DB
|
||||
mailer mail.Retryable
|
||||
log *slog.Logger
|
||||
}
|
||||
|
||||
// New 创建定时任务集合。
|
||||
func New(db *gorm.DB, log *slog.Logger) *Jobs {
|
||||
return &Jobs{db: db, log: log}
|
||||
// New 创建定时任务集合。mailer 为邮件队列(失败重试,PLAN F5)。
|
||||
func New(db *gorm.DB, mailer mail.Retryable, log *slog.Logger) *Jobs {
|
||||
return &Jobs{db: db, mailer: mailer, log: log}
|
||||
}
|
||||
|
||||
// Register 将任务注册到 cron。骨架阶段注册空任务,M1/M4 填充实现。
|
||||
// Register 将任务注册到 cron。
|
||||
func (j *Jobs) Register(c *cron.Cron) {
|
||||
// 邮件失败重试(M3):每 5 分钟重试失败邮件(超出 mail.MaxRetries 停止)
|
||||
c.AddFunc("@every 5m", func() {
|
||||
if err := j.mailer.Retry(context.Background(), mail.MaxRetries); err != nil {
|
||||
j.log.Error("cron: mail retry failed", "err", err)
|
||||
}
|
||||
})
|
||||
|
||||
// 过期扫描(M4):每日扫描到期账号,锁系统账号 + 邮件通知
|
||||
// 回收任务(M4):超回收期账号自动回收(userdel + 保留审计)
|
||||
// 审计归档(M4):每日将过期审计记录导出归档后清理
|
||||
|
||||
Reference in New Issue
Block a user