Sync from /srv/compose/unified-media-manager
This commit is contained in:
45
internal/db/migrations/009_notifications.sql
Normal file
45
internal/db/migrations/009_notifications.sql
Normal file
@@ -0,0 +1,45 @@
|
||||
-- Notification system schema
|
||||
CREATE TYPE NOTIFICATION_CHANNEL_TYPE AS ENUM ('webhook', 'telegram');
|
||||
CREATE TYPE NOTIFICATION_STATUS AS ENUM ('pending', 'delivering', 'delivered', 'failed', 'dead');
|
||||
|
||||
CREATE TABLE notification_channels (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
name TEXT NOT NULL,
|
||||
type NOTIFICATION_CHANNEL_TYPE NOT NULL,
|
||||
enabled BOOLEAN DEFAULT true,
|
||||
config JSONB NOT NULL DEFAULT '{}',
|
||||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE TABLE notification_subscriptions (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
channel_id BIGINT NOT NULL REFERENCES notification_channels(id) ON DELETE CASCADE,
|
||||
event_type EVENT_TYPE NOT NULL,
|
||||
UNIQUE(channel_id, event_type)
|
||||
);
|
||||
|
||||
CREATE TABLE notification_queue (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
channel_id BIGINT NOT NULL REFERENCES notification_channels(id) ON DELETE CASCADE,
|
||||
event_type EVENT_TYPE NOT NULL,
|
||||
title TEXT NOT NULL,
|
||||
message JSONB NOT NULL DEFAULT '{}',
|
||||
status NOTIFICATION_STATUS DEFAULT 'pending',
|
||||
attempts INT DEFAULT 0,
|
||||
max_attempts INT DEFAULT 5,
|
||||
last_error TEXT,
|
||||
next_retry_at TIMESTAMPTZ,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
delivered_at TIMESTAMPTZ
|
||||
);
|
||||
|
||||
CREATE TABLE notification_state (
|
||||
id INT PRIMARY KEY DEFAULT 1 CHECK (id = 1),
|
||||
last_event_id BIGINT DEFAULT 0,
|
||||
last_event_created_at TIMESTAMPTZ
|
||||
);
|
||||
|
||||
CREATE INDEX idx_notification_queue_status ON notification_queue (status, next_retry_at);
|
||||
|
||||
INSERT INTO notification_state (id) VALUES (1) ON CONFLICT DO NOTHING;
|
||||
Reference in New Issue
Block a user