This repository has been archived on 2026-04-03. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
core/server/database/migrations/sqlite/011_triggers.sql
Jeffrey Smith 57ccf19efb
All checks were successful
CI/CD / detect-changes (push) Successful in 5s
CI/CD / test-frontend (push) Has been skipped
CI/CD / test-go-pg (push) Successful in 2m18s
CI/CD / test-sqlite (push) Successful in 2m37s
CI/CD / build-and-deploy (push) Successful in 1m26s
Feat triggers v0.2.2 (#6)
Co-authored-by: Jeffrey Smith <jasafpro@gmail.com>
Co-committed-by: Jeffrey Smith <jasafpro@gmail.com>
2026-03-26 22:47:31 +00:00

81 lines
3.1 KiB
SQL

-- ==========================================
-- Switchboard Core — 011 Triggers & Scheduled Tasks (SQLite)
-- ==========================================
-- ── Extension Triggers (event + webhook) ──────
CREATE TABLE IF NOT EXISTS triggers (
id TEXT PRIMARY KEY,
package_id TEXT NOT NULL REFERENCES packages(id) ON DELETE CASCADE,
type TEXT NOT NULL CHECK (type IN ('webhook', 'event')),
enabled INTEGER NOT NULL DEFAULT 1,
-- Webhook triggers
slug TEXT,
secret TEXT,
-- Event triggers
event_pattern TEXT,
-- Common
entry_point TEXT NOT NULL,
config TEXT NOT NULL DEFAULT '{}',
fire_count INTEGER NOT NULL DEFAULT 0,
last_fire_at TEXT,
last_error TEXT,
created_at TEXT NOT NULL DEFAULT (datetime('now')),
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
UNIQUE(package_id, type, slug),
UNIQUE(package_id, type, event_pattern)
);
CREATE INDEX IF NOT EXISTS idx_triggers_package ON triggers(package_id);
CREATE INDEX IF NOT EXISTS idx_triggers_type ON triggers(type);
CREATE INDEX IF NOT EXISTS idx_triggers_enabled ON triggers(enabled);
CREATE INDEX IF NOT EXISTS idx_triggers_webhook ON triggers(package_id, slug);
-- ── Scheduled Tasks (user-created cron) ───────
CREATE TABLE IF NOT EXISTS scheduled_tasks (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
description TEXT NOT NULL DEFAULT '',
creator_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
run_as TEXT NOT NULL DEFAULT 'creator'
CHECK (run_as IN ('creator', 'system')),
cron_expr TEXT NOT NULL,
next_fire_at TEXT,
last_fire_at TEXT,
enabled INTEGER NOT NULL DEFAULT 1,
script TEXT NOT NULL DEFAULT '',
template_id TEXT,
template_params TEXT NOT NULL DEFAULT '{}',
fire_count INTEGER NOT NULL DEFAULT 0,
last_error TEXT,
last_duration_ms INTEGER,
created_at TEXT NOT NULL DEFAULT (datetime('now')),
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
);
CREATE INDEX IF NOT EXISTS idx_sched_tasks_creator ON scheduled_tasks(creator_id);
CREATE INDEX IF NOT EXISTS idx_sched_tasks_enabled ON scheduled_tasks(enabled);
CREATE INDEX IF NOT EXISTS idx_sched_tasks_next_fire ON scheduled_tasks(next_fire_at);
-- ── Trigger Logs (unified execution log) ──────
CREATE TABLE IF NOT EXISTS trigger_logs (
id TEXT PRIMARY KEY,
trigger_id TEXT REFERENCES triggers(id) ON DELETE CASCADE,
scheduled_task_id TEXT REFERENCES scheduled_tasks(id) ON DELETE CASCADE,
fired_at TEXT NOT NULL DEFAULT (datetime('now')),
duration_ms INTEGER,
success INTEGER NOT NULL DEFAULT 1,
error TEXT,
output TEXT
);
CREATE INDEX IF NOT EXISTS idx_trigger_logs_trigger ON trigger_logs(trigger_id);
CREATE INDEX IF NOT EXISTS idx_trigger_logs_sched ON trigger_logs(scheduled_task_id);
CREATE INDEX IF NOT EXISTS idx_trigger_logs_fired ON trigger_logs(fired_at);