// Команда migrate — накат схемы без запуска API. package main // Разовая команда: применить миграции, не поднимая API. // Нужна CI (таблицы должны существовать до интеграционных тестов) // и любому процессу, который накатывает схему без запуска сервера: // // go run ./cmd/migrate // // Тот же код, что выполняется при старте cmd/api, — расхождений // между «как стартует приложение» и «как накатывает CI» нет. import ( "context" "os" "github.com/joho/godotenv" "building-mgmt/internal/db" "building-mgmt/internal/logging" ) func main() { os.Exit(run()) } // run возвращает код выхода, а не вызывает os.Exit внутри: так defer // (закрытие пула) отрабатывает до завершения процесса. func run() int { _ = godotenv.Load() logger := logging.Setup() dsn := os.Getenv("DATABASE_URL") if dsn == "" { logger.Error("DATABASE_URL is not set") return 1 } ctx := context.Background() pool, err := db.Connect(ctx, dsn) if err != nil { logger.Error("db connect failed", "err", err) return 1 } defer pool.Close() if err := db.Migrate(ctx, pool); err != nil { logger.Error("migrations failed", "err", err) return 1 } logger.Info("schema is up to date") return 0 }