feat: watcher/CC system, SLA engine, and rich text comments

- Watcher system: ticket_watchers table, watch/unwatch endpoints,
  notifications to watchers on comments and updates, watcher/cc
  recipient sources in SendEmail scrip action, watch toggle and
  watcher avatars in ticket detail UI
- SLA engine: sla_policies table, SLA deadline columns on tickets,
  CRUD routes, OnSlaBreach scrip condition, scheduler SLA calculation,
  deadlines set on create/reply, cleared on resolve, SLA indicators
  on ticket list and detail, SLA Policies tab in admin
- Rich text: marked-based markdown rendering with XSS safety,
  Write/Preview toggle in comment composer, styled prose output
This commit is contained in:
Gjermund Høsøien Wiggen
2026-06-15 21:40:18 +02:00
parent 9679734e3f
commit 653139ad0d
18 changed files with 1025 additions and 26 deletions

View File

@@ -0,0 +1,15 @@
CREATE TABLE sla_policies (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
queue_id UUID REFERENCES queues(id) ON DELETE SET NULL,
name TEXT NOT NULL,
description TEXT,
response_time_minutes INTEGER,
resolution_time_minutes INTEGER,
disabled BOOLEAN NOT NULL DEFAULT false,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE INDEX sla_policies_queue_id_idx ON sla_policies(queue_id);
ALTER TABLE tickets ADD COLUMN sla_response_deadline TIMESTAMPTZ;
ALTER TABLE tickets ADD COLUMN sla_resolution_deadline TIMESTAMPTZ;
ALTER TABLE tickets ADD COLUMN sla_breached TEXT;