- 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 通过
32 lines
969 B
Go
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)")
|
|
})
|
|
}
|