Files
mal/internal/database/database.go

56 lines
996 B
Go

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
}