feat: setup goose and database module

This commit is contained in:
2026-05-13 10:29:34 +02:00
parent 8ba3926a11
commit 2167955bb2
18 changed files with 350 additions and 3 deletions

View File

@@ -0,0 +1,55 @@
package database
import (
"database/sql"
"embed"
"fmt"
"log"
"mal/internal/db"
"os"
"github.com/pressly/goose/v3"
"go.uber.org/fx"
)
//go:embed migrations/*.sql
var migrationsFS embed.FS
var Module = fx.Options(
fx.Provide(
ProvideSQLDB,
ProvideQueries,
),
fx.Invoke(RunMigrations),
)
func ProvideSQLDB() (*sql.DB, error) {
dbPath := os.Getenv("DB_PATH")
if dbPath == "" {
dbPath = "mal.db"
}
dbConn, err := db.Open(dbPath)
if err != nil {
return nil, fmt.Errorf("failed to open database: %w", err)
}
return dbConn, nil
}
func ProvideQueries(sqlDB *sql.DB) *db.Queries {
return db.New(sqlDB)
}
func RunMigrations(sqlDB *sql.DB) error {
goose.SetBaseFS(migrationsFS)
if err := goose.SetDialect("sqlite3"); err != nil {
return fmt.Errorf("failed to set goose dialect: %w", err)
}
log.Println("Running database migrations...")
if err := goose.Up(sqlDB, "migrations"); err != nil {
return fmt.Errorf("failed to run migrations: %w", err)
}
return nil
}