Files
spend-sparrow/internal/db/migration.go
Tim Wundenberg 23abd0fa77
Some checks failed
Build Docker Image / Build-Docker-Image (push) Has been cancelled
fix: build
2025-07-30 22:44:04 +02:00

50 lines
1.1 KiB
Go

package db
import (
"context"
"errors"
"log/slog"
"spend-sparrow/internal/types"
"github.com/golang-migrate/migrate/v4"
"github.com/golang-migrate/migrate/v4/database/sqlite3"
_ "github.com/golang-migrate/migrate/v4/source/file"
"github.com/jmoiron/sqlx"
)
type migrationLogger struct{}
func (l migrationLogger) Printf(format string, v ...any) {
//nolint:noctx
slog.Info(format, v...)
}
func (l migrationLogger) Verbose() bool {
return false
}
func RunMigrations(ctx context.Context, db *sqlx.DB, pathPrefix string) error {
driver, err := sqlite3.WithInstance(db.DB, &sqlite3.Config{})
if err != nil {
slog.ErrorContext(ctx, "Could not create Migration instance", "err", err)
return types.ErrInternal
}
m, err := migrate.NewWithDatabaseInstance(
"file://"+pathPrefix+"migration/",
"",
driver)
if err != nil {
slog.ErrorContext(ctx, "Could not create migrations instance", "err", err)
return types.ErrInternal
}
m.Log = migrationLogger{}
if err = m.Up(); err != nil && !errors.Is(err, migrate.ErrNoChange) {
slog.ErrorContext(ctx, "Could not run migrations", "err", err)
return types.ErrInternal
}
return nil
}