5fb7c6cfb0
- On boot, the app now checks if the DB version matches its expected version and refuses to start if there are pending migrations to be run. - The new `--upgrade` flag runs data migrations from the last recorded migration (in the settings table) to the latest one in the binary. - Migrations are DB/arbitrary logic functions in .go files in internal/migrations. - All migration functions are idempotent.
26 lines
760 B
Go
26 lines
760 B
Go
package migrations
|
|
|
|
import (
|
|
"github.com/jmoiron/sqlx"
|
|
"github.com/knadh/koanf"
|
|
"github.com/knadh/stuffbin"
|
|
)
|
|
|
|
// V0_4_0 performs the DB migrations for v.0.4.0.
|
|
func V0_4_0(db *sqlx.DB, fs stuffbin.FileSystem, ko *koanf.Koanf) error {
|
|
_, err := db.Exec(`
|
|
DO $$
|
|
BEGIN
|
|
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'list_optin') THEN
|
|
CREATE TYPE list_optin AS ENUM ('single', 'double');
|
|
END IF;
|
|
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'campaign_type') THEN
|
|
CREATE TYPE campaign_type AS ENUM ('regular', 'optin');
|
|
END IF;
|
|
END$$;
|
|
|
|
ALTER TABLE lists ADD COLUMN IF NOT EXISTS optin list_optin NOT NULL DEFAULT 'single';
|
|
ALTER TABLE campaigns ADD COLUMN IF NOT EXISTS type campaign_type DEFAULT 'regular';
|
|
`)
|
|
return err
|
|
}
|