feat(cli): 添加命令行敏感操作门禁和数据库管理功能

- 添加 migrate、seed、reset-all 命令行子命令
- 实现管理员密码门禁机制保护敏感操作
- 添加数据库表结构迁移和种子数据初始化功能
- 实现清空并重建全部表的 reset-all 功能
- 重构种子数据只包含系统必需基础数据,移除演示数据
- 添加 RBAC 权限角色初始化的命令行支持
- 配置命令行密码验证和操作日志记录功能
This commit is contained in:
SunYF
2026-09-20 15:38:45 +08:00
parent 60eacc9c4f
commit 5f68e77d5f
7 changed files with 320 additions and 261 deletions
+36
View File
@@ -268,3 +268,39 @@ func applyColumnPatches(ctx context.Context) {
}
}
}
// DropAllTables 删除 public schema 下全部表(CASCADE 连带索引/序列/外键约束)。
// 仅供命令行 reset-all 使用:清空后由 AutoMigrate 重建结构、SeedIfEmpty + handler.SeedRBAC 重灌种子。
// 与 MES 的 db.DropAllTables 对齐(逐表 DROP 而非 DROP SCHEMA,保留 schema 权限归属)。
func DropAllTables(c DatabaseConf) error {
dsn := fmt.Sprintf("postgresql://%s:%s@%s:%d/%s?sslmode=disable",
c.User, c.Password, c.Host, c.Port, c.Dbname)
sqlDB, err := sql.Open("pgx", dsn)
if err != nil {
return err
}
defer sqlDB.Close()
rows, err := sqlDB.Query(`SELECT tablename FROM pg_tables WHERE schemaname='public'`)
if err != nil {
return err
}
var names []string
for rows.Next() {
var t string
if err := rows.Scan(&t); err != nil {
rows.Close()
return err
}
names = append(names, t)
}
rows.Close()
for _, t := range names {
if _, err := sqlDB.Exec(`DROP TABLE IF EXISTS "` + t + `" CASCADE`); err != nil {
return err
}
}
slog.Info(fmt.Sprintf("已删除全部表 %d 张", len(names)))
return nil
}