Smail/backend/db/migration/logs.go
smail 5faadcd6eb
Some checks are pending
Security Checks / security (push) Waiting to run
保存三数据库日志与三十天清理实现,继续补充验收
2026-09-08 22:30:50 +08:00

28 lines
1.3 KiB
Go

package migration
// 日志使用可移植的数值时间和文本载荷,不依赖数据库专属 JSON、分区或事件调度器。
func logStatements() map[Dialect][]string {
result := make(map[Dialect][]string)
for _, dialect := range []Dialect{DialectSQLite, DialectMySQL, DialectPostgres} {
for _, table := range []string{"operation_log", "mail_log"} {
payloadType := "TEXT"
if dialect == DialectMySQL {
payloadType = "LONGTEXT"
}
statement := "CREATE TABLE IF NOT EXISTS " + table + " (id VARCHAR(80) PRIMARY KEY, created_at BIGINT NOT NULL, kind VARCHAR(32) NOT NULL, actor_id VARCHAR(128) NOT NULL, action VARCHAR(64) NOT NULL, section VARCHAR(32) NOT NULL, result VARCHAR(16) NOT NULL, payload " + payloadType + " NOT NULL"
if dialect == DialectMySQL {
statement += ", KEY idx_" + table + "_time (created_at, id), KEY idx_" + table + "_kind_time (kind, created_at, id)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4"
} else {
statement += ")"
}
result[dialect] = append(result[dialect], statement)
if dialect != DialectMySQL {
result[dialect] = append(result[dialect],
"CREATE INDEX IF NOT EXISTS \"idx_"+table+"_time\" ON "+table+" (created_at, id)",
"CREATE INDEX IF NOT EXISTS \"idx_"+table+"_kind_time\" ON "+table+" (kind, created_at, id)")
}
}
}
return result
}