axe/cmd/migrate/main.go

54 lines
1.5 KiB
Go
Raw Normal View History

2026-10-18 19:07:25 +00:00
// Команда 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
}