From 10b20569543e17f4022f6822b7d239696fa57172 Mon Sep 17 00:00:00 2001 From: garionion Date: Wed, 26 Feb 2025 00:11:04 +0100 Subject: [PATCH] refactor: replace golang-migrate with goose for database migrations --- main.go | 30 +++++++++--------------------- 1 file changed, 9 insertions(+), 21 deletions(-) diff --git a/main.go b/main.go index e4d8c7d..fe42959 100644 --- a/main.go +++ b/main.go @@ -7,14 +7,12 @@ import ( "encoding/json" "fmt" "github.com/num30/config" + "github.com/pressly/goose/v3" "go.uber.org/zap" "io" "net/http" "strings" - "github.com/golang-migrate/migrate/v4" - "github.com/golang-migrate/migrate/v4/database/sqlite3" - "github.com/golang-migrate/migrate/v4/source/iofs" "github.com/labstack/echo/v4" "github.com/labstack/echo/v4/middleware" _ "github.com/mattn/go-sqlite3" @@ -24,7 +22,7 @@ import ( //go:embed static/* var staticFiles embed.FS -//go:embed database/sqlite/migration/* +//go:embed database/sqlite/migration/*.sql var sqliteMigrations embed.FS type OAuthConfig struct { @@ -105,8 +103,7 @@ func main() { dsn = fmt.Sprintf("%s:%s@tcp(%s:%d)/%s", cfg.DB.User, cfg.DB.Password, cfg.DB.Host, cfg.DB.Port, cfg.DB.DBName) } - - var err error + db, err = sql.Open(cfg.DB.Driver, dsn) if err != nil { logger.Fatal("Failed to connect to database", zap.Error(err)) @@ -158,23 +155,14 @@ func main() { } func migrateSqlite(db *sql.DB) error { - driver, err := sqlite3.WithInstance(db, &sqlite3.Config{}) - if err != nil { - return fmt.Errorf("failed to create migration driver: %w", err) + goose.SetBaseFS(sqliteMigrations) + + if err := goose.SetDialect("sqlite3"); err != nil { + return fmt.Errorf("failed to set db type for migration: %w", err) } - sourceInstance, err := iofs.New(sqliteMigrations, "database/sqlite/migration") - if err != nil { - return fmt.Errorf("failed to create migration source: %w", err) - } - - m, err := migrate.NewWithInstance("iofs", sourceInstance, "sqlite3", driver) - if err != nil { - return fmt.Errorf("failed to initialize migrations: %w", err) - } - - if err := m.Up(); err != nil && err != migrate.ErrNoChange { - return fmt.Errorf("failed to run migrations: %w", err) + if err := goose.Up(db, "database/sqlite/migration"); err != nil { + return fmt.Errorf("failed to apply db migrations: %w", err) } return nil