Files
spend-sparrow/internal/db/migration.go
Tim Wundenberg 46885e9c7c
Some checks failed
Build Docker Image / Build-Docker-Image (push) Failing after 3m40s
fix(observabillity): include otel logs
2025-06-07 15:13:11 +02:00

48 lines
1.0 KiB
Go

package db
import (
"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) {
slog.Info(format, v...)
}
func (l migrationLogger) Verbose() bool {
return false
}
func RunMigrations(db *sqlx.DB, pathPrefix string) error {
driver, err := sqlite3.WithInstance(db.DB, &sqlite3.Config{})
if err != nil {
slog.Error("Could not create Migration instance", "err", err)
return types.ErrInternal
}
m, err := migrate.NewWithDatabaseInstance(
"file://"+pathPrefix+"migration/",
"",
driver)
if err != nil {
slog.Error("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.Error("Could not run migrations", "err", err)
return types.ErrInternal
}
return nil
}