package diunwebhook import ( "database/sql" "embed" "errors" "github.com/golang-migrate/migrate/v4" pgxmigrate "github.com/golang-migrate/migrate/v4/database/pgx/v5" sqlitemigrate "github.com/golang-migrate/migrate/v4/database/sqlite" "github.com/golang-migrate/migrate/v4/source/iofs" _ "modernc.org/sqlite" ) //go:embed migrations/sqlite var sqliteMigrations embed.FS //go:embed migrations/postgres var postgresMigrations embed.FS // RunSQLiteMigrations applies all pending schema migrations to the given SQLite database. // Returns nil if all migrations applied successfully or if database is already up to date. func RunSQLiteMigrations(db *sql.DB) error { src, err := iofs.New(sqliteMigrations, "migrations/sqlite") if err != nil { return err } driver, err := sqlitemigrate.WithInstance(db, &sqlitemigrate.Config{}) if err != nil { return err } m, err := migrate.NewWithInstance("iofs", src, "sqlite", driver) if err != nil { return err } if err := m.Up(); err != nil && !errors.Is(err, migrate.ErrNoChange) { return err } return nil } // RunPostgresMigrations applies all pending schema migrations to the given PostgreSQL database. // Returns nil if all migrations applied successfully or if database is already up to date. func RunPostgresMigrations(db *sql.DB) error { src, err := iofs.New(postgresMigrations, "migrations/postgres") if err != nil { return err } driver, err := pgxmigrate.WithInstance(db, &pgxmigrate.Config{}) if err != nil { return err } m, err := migrate.NewWithInstance("iofs", src, "pgx5", driver) if err != nil { return err } if err := m.Up(); err != nil && !errors.Is(err, migrate.ErrNoChange) { return err } return nil }