feat(M3): 申请审批 + 邮件队列 — 公开申请、管理员审批自动建号、mail_logs 落库重试

This commit is contained in:
2026-08-30 10:01:38 +08:00
parent a5f501dba4
commit 1ea18490e0
13 changed files with 830 additions and 27 deletions
+6 -4
View File
@@ -94,8 +94,10 @@ func cmdServe(args []string) error {
sessions := auth.NewDBSessionStore(db)
resets := auth.NewDBResetTokenStore(db)
limiter := auth.NewRateLimiter(cfg.Auth.MaxLoginFailures, cfg.Auth.LockDuration)
mailer := mail.New(cfg.SMTP, log)
// M3:所有邮件经队列(mail_logs 落库 + 失败重试),OTP 双通道不受邮件故障影响
mailer := mail.NewQueuedMailer(mail.New(cfg.SMTP, log), db, log)
authSvc := service.NewAuthService(db, cfg, otps, captchas, sessions, resets, limiter, mailer, userSvc, adminSvc, auditSvc, log)
approvalSvc := service.NewApprovalService(db, cfg, userSvc, mailer, log)
// 启动前自动迁移(骨架阶段保证表结构就绪;M5 部署建议显式 migrate)
if err := model.Migrate(db); err != nil {
@@ -103,13 +105,13 @@ func cmdServe(args []string) error {
}
log.Info("db: migrated", "driver", cfg.Database.Driver, "dsn", cfg.Database.DSN)
// 定时任务(骨架:M1/M4 填充过期扫描/回收/审计归档)
// 定时任务(M3:邮件失败重试;M4 填充过期扫描/回收/审计归档)
sched := robfigcron.New()
cron.New(db, log).Register(sched)
cron.New(db, mailer, log).Register(sched)
sched.Start()
defer sched.Stop()
h := api.New(cfg, authSvc, userSvc, keySvc, auditSvc)
h := api.New(cfg, authSvc, userSvc, keySvc, approvalSvc, auditSvc)
r := router.New(cfg, h, sessions, log)
srv := server.New(cfg.Server.Listen, r, log)