Files
usernode/internal/cron/cron.go
T
cao.wangrenbo ae45aba607 feat(M0): 工程骨架 — Go 后端 + Vue3 前端脚手架
- Go 工程:cmd/usernode CLI(serve/migrate/admin create/reset-password/user otp)
  + internal/{config,model,service,system,auth,cron,api,router,server,pkg,webui}
- 配置:TOML + 环境变量覆盖(USERNODE_<SEC>_<FIELD>),config.example.toml
- 数据:GORM 双驱动(SQLite/MySQL)8 表模型,migrate 子命令可跑通
- 系统层:system.Manager 接口(useradd/userdel/passwd 白名单,dev dry-run)
- HTTP:Gin 路由骨架(/api/v1 + 501 占位),healthz,slog 结构化日志,优雅启停
- 前端:Vite + Vue3 + TS + Element Plus 最小可运行(web/),go:embed 打通
- 构建:deploy/Containerfile 多阶段单二进制镜像,web/Containerfile.dev 前端 dev
  镜像,Makefile(build/test/dev/web-build/image);go.mod 锁定 go 1.22
- 验证:go build/vet/test 通过;podman 镜像构建运行 healthz+embed 通过
2026-08-29 22:43:27 +08:00

32 lines
969 B
Go

// Package cron 提供定时任务:过期扫描、回收、审计归档。
// M0 注册任务框架(任务函数在 M1/M4 接入),单实例部署说明见 PLAN §11。
package cron
import (
"log/slog"
"github.com/robfig/cron/v3"
"gorm.io/gorm"
)
// Jobs 聚合定时任务依赖与注册。
type Jobs struct {
db *gorm.DB
log *slog.Logger
}
// New 创建定时任务集合。
func New(db *gorm.DB, log *slog.Logger) *Jobs {
return &Jobs{db: db, log: log}
}
// Register 将任务注册到 cron。骨架阶段注册空任务,M1/M4 填充实现。
func (j *Jobs) Register(c *cron.Cron) {
// 过期扫描(M4):每日扫描到期账号,锁系统账号 + 邮件通知
// 回收任务(M4):超回收期账号自动回收(userdel + 保留审计)
// 审计归档(M4):每日将过期审计记录导出归档后清理
c.AddFunc("@daily", func() {
j.log.Info("cron: daily maintenance tick (tasks to be implemented in M1/M4)")
})
}