mirror of
https://tangled.org/tranquil.farm/tranquil-pds
synced 2026-09-04 17:26:56 +00:00
37 lines
1.3 KiB
SQL
37 lines
1.3 KiB
SQL
CREATE TYPE notification_channel AS ENUM ('email', 'discord', 'telegram', 'signal');
|
|
CREATE TYPE notification_status AS ENUM ('pending', 'processing', 'sent', 'failed');
|
|
CREATE TYPE notification_type AS ENUM (
|
|
'welcome',
|
|
'email_verification',
|
|
'password_reset',
|
|
'email_update',
|
|
'account_deletion'
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS notification_queue (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
channel notification_channel NOT NULL DEFAULT 'email',
|
|
notification_type notification_type NOT NULL,
|
|
status notification_status NOT NULL DEFAULT 'pending',
|
|
recipient TEXT NOT NULL,
|
|
subject TEXT,
|
|
body TEXT NOT NULL,
|
|
metadata JSONB,
|
|
attempts INT NOT NULL DEFAULT 0,
|
|
max_attempts INT NOT NULL DEFAULT 3,
|
|
last_error TEXT,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
scheduled_for TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
processed_at TIMESTAMPTZ
|
|
);
|
|
|
|
CREATE INDEX idx_notification_queue_status_scheduled
|
|
ON notification_queue(status, scheduled_for)
|
|
WHERE status = 'pending';
|
|
|
|
CREATE INDEX idx_notification_queue_user_id ON notification_queue(user_id);
|
|
|
|
ALTER TABLE users ADD COLUMN IF NOT EXISTS preferred_notification_channel notification_channel NOT NULL DEFAULT 'email';
|