CREATE TABLE IF NOT EXISTS webhook_subscriptions ( id SERIAL PRIMARY KEY, account_id INTEGER NOT NULL, inbox_id INTEGER, name VARCHAR(255), url VARCHAR(2048) NOT NULL, events JSONB NOT NULL DEFAULT '[]', secret VARCHAR(128) NOT NULL, webhook_type INTEGER DEFAULT 0, active BOOLEAN DEFAULT TRUE, verified_at TIMESTAMP WITH TIME ZONE, last_delivery_status VARCHAR(50), last_delivery_at TIMESTAMP WITH TIME ZONE, created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), deleted_at TIMESTAMP WITH TIME ZONE ); ALTER TABLE webhook_subscriptions ADD COLUMN IF NOT EXISTS inbox_id INTEGER, ADD COLUMN IF NOT EXISTS name VARCHAR(255), ADD COLUMN IF NOT EXISTS webhook_type INTEGER DEFAULT 0; UPDATE webhook_subscriptions SET active = TRUE WHERE active IS NULL; CREATE INDEX IF NOT EXISTS idx_webhook_subscriptions_account_id ON webhook_subscriptions(account_id) WHERE deleted_at IS NULL; CREATE INDEX IF NOT EXISTS idx_webhook_subscriptions_inbox_id ON webhook_subscriptions(inbox_id) WHERE deleted_at IS NULL; CREATE UNIQUE INDEX IF NOT EXISTS idx_webhook_subscriptions_account_url ON webhook_subscriptions(account_id, url) WHERE deleted_at IS NULL AND active = TRUE;