feat(notifications): alert oversight review queues

This commit is contained in:
JB
2026-07-26 01:53:53 -04:00
parent d4ddfe3b80
commit 551a5c29a1
12 changed files with 328 additions and 3 deletions
+22
View File
@@ -67,6 +67,28 @@ CREATE TABLE IF NOT EXISTS notification_preferences (
updated_at TEXT NOT NULL,
PRIMARY KEY(user_id, category)
);
CREATE TABLE IF NOT EXISTS oversight_notification_preferences (
user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
oversight_category TEXT NOT NULL CHECK(oversight_category IN ('data_changes', 'avatars')),
frequency TEXT NOT NULL DEFAULT 'immediate' CHECK(frequency IN ('immediate', '15_minutes', '1_hour', 'daily')),
updated_at TEXT NOT NULL,
PRIMARY KEY(user_id, oversight_category)
);
CREATE TABLE IF NOT EXISTS oversight_notification_queue (
id TEXT PRIMARY KEY,
user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
oversight_category TEXT NOT NULL CHECK(oversight_category IN ('data_changes', 'avatars')),
review_item_id TEXT NOT NULL,
title TEXT NOT NULL,
summary TEXT NOT NULL,
link TEXT NOT NULL,
frequency TEXT NOT NULL CHECK(frequency IN ('15_minutes', '1_hour', 'daily')),
created_at TEXT NOT NULL,
deliver_after TEXT NOT NULL,
delivered_at TEXT
);
CREATE INDEX IF NOT EXISTS oversight_notification_queue_due_idx ON oversight_notification_queue(delivered_at, deliver_after);
CREATE INDEX IF NOT EXISTS oversight_notification_queue_user_category_idx ON oversight_notification_queue(user_id, oversight_category, delivered_at);
CREATE INDEX IF NOT EXISTS avatar_reviews_status_submitted_idx ON avatar_reviews(status, submitted_at DESC);
CREATE INDEX IF NOT EXISTS avatar_reviews_user_submitted_idx ON avatar_reviews(user_id, submitted_at DESC);
CREATE TABLE IF NOT EXISTS builds (id TEXT PRIMARY KEY, owner_id TEXT NOT NULL REFERENCES users(id), title TEXT NOT NULL, slug TEXT NOT NULL UNIQUE, visibility TEXT NOT NULL DEFAULT 'private', summary TEXT, guide_body TEXT, source_build_id TEXT REFERENCES builds(id), loadout_json TEXT, created_at TEXT NOT NULL, updated_at TEXT NOT NULL);