axe/cmd/migrate/main.go
2026-10-18 22:07:25 +03:00

54 lines
1.5 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Команда 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
}