Files
sciagent/be0/migrations/006_user_notifications.sql
T
Thinh Lam 688fac73e9
CI/CD / backend (push) Failing after 2m8s
CI/CD / frontend (push) Failing after 1m40s
CI/CD / deploy (push) Has been skipped
sciagent code + Gitea Actions CI/CD
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 09:38:30 +07:00

27 lines
1.1 KiB
SQL

-- In-app notifications for applicants (admin adjudication → inbox).
-- Best-effort insert after PUT/POST admin-result; full text duplicated for read UX.
CREATE TABLE IF NOT EXISTS user_notifications (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
recipient_user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
type TEXT NOT NULL CHECK (type IN ('admin_application_decision')),
title TEXT NOT NULL,
body TEXT NOT NULL,
application_id TEXT NOT NULL,
related_initiative_id UUID REFERENCES initiatives(id) ON DELETE SET NULL,
source_admin_result_id UUID REFERENCES application_admin_results(id) ON DELETE SET NULL,
decision TEXT NOT NULL CHECK (decision IN ('approved','rejected')),
merit_category_label TEXT,
feedback_text TEXT NOT NULL DEFAULT '',
rationale_text TEXT,
read_at TIMESTAMPTZ,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE INDEX IF NOT EXISTS user_notifications_inbox_idx
ON user_notifications (recipient_user_id, created_at DESC);
CREATE INDEX IF NOT EXISTS user_notifications_unread_idx
ON user_notifications (recipient_user_id)
WHERE read_at IS NULL;