First swagger version, added auto-migrate on startup

This commit is contained in:
2026-03-15 20:40:41 +05:00
parent fb0269f804
commit b38f9cf8fd
18 changed files with 984 additions and 30 deletions

View File

@@ -2,9 +2,18 @@ package database
import (
"context"
"database/sql"
"fmt"
"log/slog"
"github.com/jackc/pgx/v5/pgxpool"
"github.com/pressly/goose/v3"
)
const (
pgDriverName = "pgx"
migrationsDir = "./migrations"
gooseDriverName = "postgres"
)
func NewConnectionPool(ctx context.Context, connectionString string) (*pgxpool.Pool, error) {
@@ -21,3 +30,29 @@ func NewConnectionPool(ctx context.Context, connectionString string) (*pgxpool.P
return pool, nil
}
func RunMigrations(ctx context.Context, dbURL string) error {
db, err := sql.Open(pgDriverName, dbURL)
if err != nil {
return fmt.Errorf("не удалось открыть соединение для миграций: %w", err)
}
defer db.Close()
goose.SetDialect(gooseDriverName)
statusErr := goose.Status(db, migrationsDir)
if statusErr != nil {
slog.WarnContext(ctx, "Не удалось получить статус миграций", "error", statusErr)
}
current, _ := goose.GetDBVersion(db)
slog.InfoContext(ctx, "Текущая версия БД", "version", current)
slog.DebugContext(ctx, "Запуск миграций Goose...")
if err := goose.Up(db, migrationsDir); err != nil {
return fmt.Errorf("ошибка применения миграций: %w", err)
}
slog.InfoContext(ctx, "Миграции успешно применены или уже актуальны")
return nil
}