34 lines
1.3 KiB
SQL
34 lines
1.3 KiB
SQL
-- Admin-authored announcements for normal users.
|
|
|
|
CREATE TABLE IF NOT EXISTS user_announcements (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
title TEXT NOT NULL,
|
|
content TEXT NOT NULL,
|
|
level TEXT NOT NULL DEFAULT 'info',
|
|
status TEXT NOT NULL DEFAULT 'published',
|
|
audience TEXT NOT NULL DEFAULT 'all',
|
|
starts_at TEXT,
|
|
ends_at TEXT,
|
|
created_at TEXT NOT NULL DEFAULT (CURRENT_TIMESTAMP::TEXT),
|
|
updated_at TEXT NOT NULL DEFAULT (CURRENT_TIMESTAMP::TEXT),
|
|
published_at TEXT
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS user_announcements_status_created_at_idx
|
|
ON user_announcements (status, created_at);
|
|
|
|
CREATE INDEX IF NOT EXISTS user_announcements_active_window_idx
|
|
ON user_announcements (starts_at, ends_at);
|
|
|
|
CREATE TABLE IF NOT EXISTS user_announcement_reads (
|
|
announcement_id BIGINT NOT NULL,
|
|
user_id BIGINT NOT NULL,
|
|
read_at TEXT NOT NULL DEFAULT (CURRENT_TIMESTAMP::TEXT),
|
|
PRIMARY KEY (announcement_id, user_id),
|
|
FOREIGN KEY (announcement_id) REFERENCES user_announcements(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS user_announcement_reads_user_id_idx
|
|
ON user_announcement_reads (user_id);
|