52 lines
942 B
Go
52 lines
942 B
Go
package database
|
|
|
|
import (
|
|
"database/sql"
|
|
"embed"
|
|
"fmt"
|
|
"log"
|
|
"mal/internal/db"
|
|
|
|
"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 := db.GetDBFile()
|
|
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
|
|
}
|