package db import ( mcdsldb "git.wntrmute.dev/mc/mcdsl/db" ) // Migrations is the ordered list of schema migrations for mc-proxy. var Migrations = []mcdsldb.Migration{ { Version: 1, Name: "create_core_tables", SQL: ` CREATE TABLE IF NOT EXISTS listeners ( id INTEGER PRIMARY KEY, addr TEXT NOT NULL UNIQUE ); CREATE TABLE IF NOT EXISTS routes ( id INTEGER PRIMARY KEY, listener_id INTEGER NOT NULL REFERENCES listeners(id) ON DELETE CASCADE, hostname TEXT NOT NULL, backend TEXT NOT NULL, UNIQUE(listener_id, hostname) ); CREATE INDEX IF NOT EXISTS idx_routes_listener ON routes(listener_id); CREATE TABLE IF NOT EXISTS firewall_rules ( id INTEGER PRIMARY KEY, type TEXT NOT NULL CHECK(type IN ('ip', 'cidr', 'country')), value TEXT NOT NULL, UNIQUE(type, value) );`, }, { Version: 2, Name: "add_proxy_protocol_and_l7_fields", SQL: ` ALTER TABLE listeners ADD COLUMN proxy_protocol INTEGER NOT NULL DEFAULT 0; ALTER TABLE routes ADD COLUMN mode TEXT NOT NULL DEFAULT 'l4' CHECK(mode IN ('l4', 'l7')); ALTER TABLE routes ADD COLUMN tls_cert TEXT NOT NULL DEFAULT ''; ALTER TABLE routes ADD COLUMN tls_key TEXT NOT NULL DEFAULT ''; ALTER TABLE routes ADD COLUMN backend_tls INTEGER NOT NULL DEFAULT 0; ALTER TABLE routes ADD COLUMN send_proxy_protocol INTEGER NOT NULL DEFAULT 0;`, }, { Version: 3, Name: "add_listener_max_connections", SQL: `ALTER TABLE listeners ADD COLUMN max_connections INTEGER NOT NULL DEFAULT 0;`, }, { Version: 4, Name: "create_l7_policies_table", SQL: ` CREATE TABLE IF NOT EXISTS l7_policies ( id INTEGER PRIMARY KEY, route_id INTEGER NOT NULL REFERENCES routes(id) ON DELETE CASCADE, type TEXT NOT NULL CHECK(type IN ('block_user_agent', 'require_header')), value TEXT NOT NULL, UNIQUE(route_id, type, value) ); CREATE INDEX IF NOT EXISTS idx_l7_policies_route ON l7_policies(route_id);`, }, } // Migrate runs all unapplied migrations sequentially. func (s *Store) Migrate() error { return mcdsldb.Migrate(s.db, Migrations) }