0.2.77
This commit is contained in:
@@ -831,3 +831,42 @@ CREATE INDEX IF NOT EXISTS library_ingest_pending_idx
|
||||
WHERE state = 'pending';
|
||||
CREATE INDEX IF NOT EXISTS library_ingest_recent_idx
|
||||
ON library_ingest_queue (updated_at DESC);
|
||||
|
||||
-- The outbound notification log: what Memby sent, to whom, over which channel, and what
|
||||
-- became of it. Written only by internal/notify, which every producer now goes through,
|
||||
-- so this is one audit trail rather than a per-feature guess.
|
||||
--
|
||||
-- Deliberately separate from user_notifications. That table is one viewer's undismissed
|
||||
-- list — state they empty — where this is history: it keeps the row for a notification
|
||||
-- that was dismissed, for one that was deliberately skipped, and for a broadcast that
|
||||
-- belongs to no viewer at all, none of which the other table can represent.
|
||||
--
|
||||
-- emby_user_id is '' rather than NULL for a household broadcast, so every filter is an
|
||||
-- equality test and no query needs a NULL case.
|
||||
CREATE TABLE IF NOT EXISTS notification_log (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
occurred_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
channel TEXT NOT NULL, -- in-app | broadcast | webhook
|
||||
kind TEXT NOT NULL DEFAULT '', -- show-return, watch-time-week, …
|
||||
source TEXT NOT NULL DEFAULT '', -- the service that decided to send
|
||||
emby_user_id TEXT NOT NULL DEFAULT '', -- '' is the whole household
|
||||
username TEXT NOT NULL DEFAULT '',
|
||||
title TEXT NOT NULL DEFAULT '',
|
||||
body TEXT NOT NULL DEFAULT '',
|
||||
item_id TEXT NOT NULL DEFAULT '',
|
||||
target TEXT NOT NULL DEFAULT '', -- a destination's NAME, never its address
|
||||
source_key TEXT NOT NULL DEFAULT '',
|
||||
status TEXT NOT NULL, -- sent | delivered | failed | pending | skipped
|
||||
detail TEXT NOT NULL DEFAULT '', -- the failure, or why it was skipped
|
||||
duration_ms BIGINT NOT NULL DEFAULT 0,
|
||||
event_at TIMESTAMPTZ,
|
||||
metadata JSONB NOT NULL DEFAULT '{}'::jsonb
|
||||
);
|
||||
|
||||
-- The page's default read is the whole log newest-first, and every filtered read still
|
||||
-- bounds on the date; the remaining three cover the columns the filter bar offers.
|
||||
CREATE INDEX IF NOT EXISTS notification_log_time_idx ON notification_log (occurred_at DESC);
|
||||
CREATE INDEX IF NOT EXISTS notification_log_user_idx
|
||||
ON notification_log (emby_user_id, occurred_at DESC) WHERE emby_user_id <> '';
|
||||
CREATE INDEX IF NOT EXISTS notification_log_status_idx ON notification_log (status, occurred_at DESC);
|
||||
CREATE INDEX IF NOT EXISTS notification_log_kind_idx ON notification_log (kind, occurred_at DESC);
|
||||
|
||||
Reference in New Issue
Block a user