ultisuite-backend/migrations/000011_webhook_reliability.up.sql
R3D347HR4Y 1b9a3394e2 Implement rule simulation and webhook enhancements
- Added a new endpoint for simulating rules based on sample messages, allowing users to test rule conditions and actions.
- Enhanced webhook management with versioning, preview capabilities, and improved validation for webhook requests.
- Updated service interfaces to support new functionalities, including max retries for webhooks and signing secrets.
- Implemented observability metrics for webhook retries and dead-letter tracking, improving error handling and monitoring.
- Enhanced unit tests to cover new simulation and webhook features, ensuring robust functionality and validation.
2026-05-22 17:53:51 +02:00

60 lines
2.1 KiB
SQL

ALTER TABLE webhook_templates
ADD COLUMN IF NOT EXISTS version INT NOT NULL DEFAULT 1;
ALTER TABLE webhook_templates
ADD COLUMN IF NOT EXISTS signing_secret TEXT NOT NULL DEFAULT '';
ALTER TABLE webhook_templates
ADD COLUMN IF NOT EXISTS max_retries INT NOT NULL DEFAULT 3;
ALTER TABLE webhook_templates
DROP CONSTRAINT IF EXISTS webhook_templates_max_retries_chk;
ALTER TABLE webhook_templates
ADD CONSTRAINT webhook_templates_max_retries_chk
CHECK (max_retries >= 0 AND max_retries <= 10) NOT VALID;
CREATE TABLE IF NOT EXISTS webhook_template_versions (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
template_id UUID NOT NULL REFERENCES webhook_templates(id) ON DELETE CASCADE,
version INT NOT NULL,
method TEXT NOT NULL DEFAULT 'POST',
headers JSONB NOT NULL DEFAULT '{}',
body_template TEXT NOT NULL DEFAULT '',
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
UNIQUE(template_id, version)
);
INSERT INTO webhook_template_versions (template_id, version, method, headers, body_template)
SELECT wt.id, wt.version, wt.method, wt.headers, wt.body_template
FROM webhook_templates wt
WHERE NOT EXISTS (
SELECT 1
FROM webhook_template_versions wtv
WHERE wtv.template_id = wt.id
AND wtv.version = wt.version
);
ALTER TABLE webhook_logs
ADD COLUMN IF NOT EXISTS attempt_count INT NOT NULL DEFAULT 1;
ALTER TABLE webhook_logs
ADD COLUMN IF NOT EXISTS payload_preview TEXT NOT NULL DEFAULT '';
ALTER TABLE webhook_logs
ADD COLUMN IF NOT EXISTS payload_truncated BOOLEAN NOT NULL DEFAULT false;
CREATE TABLE IF NOT EXISTS webhook_dead_letters (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
template_id UUID NOT NULL REFERENCES webhook_templates(id) ON DELETE CASCADE,
message_id UUID REFERENCES messages(id) ON DELETE SET NULL,
attempt_count INT NOT NULL DEFAULT 0,
last_status_code INT NOT NULL DEFAULT 0,
error TEXT NOT NULL DEFAULT '',
payload_preview TEXT NOT NULL DEFAULT '',
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_webhook_dead_letters_template
ON webhook_dead_letters(template_id, created_at DESC);