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 }