refactor: replace golang-migrate with goose for database migrations

This commit is contained in:
garionion 2025-02-26 00:11:04 +01:00 committed by garionion (aider)
parent aabf45915a
commit 10b2056954

30
main.go
View file

@ -7,14 +7,12 @@ import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"github.com/num30/config" "github.com/num30/config"
"github.com/pressly/goose/v3"
"go.uber.org/zap" "go.uber.org/zap"
"io" "io"
"net/http" "net/http"
"strings" "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"
"github.com/labstack/echo/v4/middleware" "github.com/labstack/echo/v4/middleware"
_ "github.com/mattn/go-sqlite3" _ "github.com/mattn/go-sqlite3"
@ -24,7 +22,7 @@ import (
//go:embed static/* //go:embed static/*
var staticFiles embed.FS var staticFiles embed.FS
//go:embed database/sqlite/migration/* //go:embed database/sqlite/migration/*.sql
var sqliteMigrations embed.FS var sqliteMigrations embed.FS
type OAuthConfig struct { type OAuthConfig struct {
@ -105,8 +103,7 @@ func main() {
dsn = fmt.Sprintf("%s:%s@tcp(%s:%d)/%s", dsn = fmt.Sprintf("%s:%s@tcp(%s:%d)/%s",
cfg.DB.User, cfg.DB.Password, cfg.DB.Host, cfg.DB.Port, cfg.DB.DBName) 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) db, err = sql.Open(cfg.DB.Driver, dsn)
if err != nil { if err != nil {
logger.Fatal("Failed to connect to database", zap.Error(err)) logger.Fatal("Failed to connect to database", zap.Error(err))
@ -158,23 +155,14 @@ func main() {
} }
func migrateSqlite(db *sql.DB) error { func migrateSqlite(db *sql.DB) error {
driver, err := sqlite3.WithInstance(db, &sqlite3.Config{}) goose.SetBaseFS(sqliteMigrations)
if err != nil {
return fmt.Errorf("failed to create migration driver: %w", err) 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 := goose.Up(db, "database/sqlite/migration"); err != nil {
if err != nil { return fmt.Errorf("failed to apply db migrations: %w", err)
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)
} }
return nil return nil