feat: 完善后端脚手架基础能力

This commit is contained in:
2026-08-09 01:06:21 +08:00
parent e311f416f2
commit f95311a107
61 changed files with 5630 additions and 521 deletions
+33 -4
View File
@@ -5,6 +5,8 @@ import (
"fmt"
"log"
"os"
"path/filepath"
"strings"
"go.uber.org/zap"
@@ -15,7 +17,7 @@ import (
func main() {
var (
env = flag.String("env", "local", "环境配置 (local/production)")
env = flag.String("env", "", "Atlas 环境,默认根据应用环境和数据库驱动推断")
action = flag.String("action", "", "操作类型: status, diff, apply, validate, reset, baseline")
name = flag.String("name", "", "迁移名称 (仅用于 diff 操作)")
dryRun = flag.Bool("dry-run", false, "模拟执行,不实际应用迁移 (仅用于 apply 操作)")
@@ -41,8 +43,17 @@ func main() {
}
defer middlewares.Sync()
driver := normalizeDriver(cfg.Database.Driver)
if driver != "postgres" && driver != "mysql" && driver != "sqlite" {
middlewares.Logger.Fatal("不支持的数据库驱动", zap.String("driver", cfg.Database.Driver))
}
if *env == "" {
*env = atlasEnvironment(cfg.App.Environment, driver)
}
migrationConfig := &database.MigrationConfig{
Environment: *env,
Directory: filepath.Join("migrations", driver),
Timeout: 240,
}
@@ -72,6 +83,25 @@ func main() {
}
}
func normalizeDriver(driver string) string {
switch strings.ToLower(strings.TrimSpace(driver)) {
case "postgresql":
return "postgres"
case "sqlite3":
return "sqlite"
default:
return strings.ToLower(strings.TrimSpace(driver))
}
}
func atlasEnvironment(environment, driver string) string {
prefix := "local"
if strings.EqualFold(environment, "production") {
prefix = "production"
}
return prefix + "_" + driver
}
func handleStatus(manager *database.MigrationManager) {
fmt.Println("🔍 检查迁移状态...")
if err := manager.CheckMigrations(); err != nil {
@@ -96,12 +126,11 @@ func handleDiff(manager *database.MigrationManager, name string) {
func handleApply(manager *database.MigrationManager, dryRun bool) {
if dryRun {
fmt.Println("🧪 模拟应用迁移 (dry-run)...")
fmt.Println("注意: dry-run 功能需要在 Atlas 命令中添加 --dry-run 参数")
} else {
fmt.Println("🚀 应用迁移...")
}
if err := manager.ApplyMigrations(); err != nil {
if err := manager.ApplyMigrations(dryRun); err != nil {
middlewares.Logger.Fatal("应用迁移失败", zap.Error(err))
}
fmt.Println("✅ 迁移应用完成")
@@ -165,7 +194,7 @@ func printUsage() {
fmt.Println(" baseline 基线迁移指导 (显示基线创建命令)")
fmt.Println()
fmt.Println("选项:")
fmt.Println(" -env 环境配置 (默认: local)")
fmt.Println(" -env Atlas 环境 (默认: local_<driver> 或 production_<driver>)")
fmt.Println(" -name 迁移名称 (仅用于 diff)")
fmt.Println(" -dry-run 模拟执行 (仅用于 apply)")
fmt.Println()