716f952bb6
- Add database migrations for message base table with indexes for efficient querying - Implement rich content support with attachment, embed, and poll tables - Create social features including reactions, bookmarks, mentions, and read states - Add thread management with participant tracking and resolution capabilities - Include article posts with title, cover image, tags, and engagement metrics - Support scheduled messages, stickers, forwards, and interactive components - Fix UUID defaults and ensure proper uniqueness constraints for drafts - Add gRPC health server for imks and health check client for appks connectivity - Replace non-connectable 0.0.0.0 addresses with localhost in service discovery - Normalize addresses during RPC configuration to handle bind address issues
103 lines
4.1 KiB
PL/PgSQL
103 lines
4.1 KiB
PL/PgSQL
-- ============================================================
|
|
-- Migration: 005_message_misc.sql
|
|
-- Tables: message_notification, message_scheduled, message_sticker,
|
|
-- message_forward, message_component
|
|
-- ============================================================
|
|
|
|
BEGIN;
|
|
|
|
-- models/message_notification.rs → message_notification
|
|
CREATE TABLE IF NOT EXISTS message_notification (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
message_id UUID NOT NULL REFERENCES message(id) ON DELETE CASCADE,
|
|
channel_id UUID NOT NULL,
|
|
user_id UUID NOT NULL,
|
|
reason TEXT NOT NULL,
|
|
status TEXT NOT NULL DEFAULT 'pending',
|
|
delivery_channel TEXT NULL,
|
|
delivered_at TIMESTAMPTZ NULL,
|
|
read_at TIMESTAMPTZ NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_message_notification_user_id
|
|
ON message_notification (user_id, created_at DESC);
|
|
CREATE INDEX IF NOT EXISTS idx_message_notification_status
|
|
ON message_notification (status);
|
|
|
|
-- models/message_scheduled.rs → message_scheduled
|
|
CREATE TABLE IF NOT EXISTS message_scheduled (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
channel_id UUID NOT NULL,
|
|
author_id UUID NOT NULL,
|
|
thread_id UUID NULL REFERENCES message_thread(id) ON DELETE SET NULL,
|
|
reply_to_message_id UUID NULL REFERENCES message(id) ON DELETE SET NULL,
|
|
body TEXT NOT NULL,
|
|
metadata JSONB NULL,
|
|
scheduled_at TIMESTAMPTZ NOT NULL,
|
|
status TEXT NOT NULL DEFAULT 'pending',
|
|
sent_message_id UUID NULL REFERENCES message(id) ON DELETE SET NULL,
|
|
error TEXT NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_message_scheduled_status_at
|
|
ON message_scheduled (status, scheduled_at);
|
|
|
|
-- models/message_sticker.rs → message_sticker
|
|
CREATE TABLE IF NOT EXISTS message_sticker (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
message_id UUID NOT NULL REFERENCES message(id) ON DELETE CASCADE,
|
|
sticker_id UUID NOT NULL,
|
|
name TEXT NOT NULL,
|
|
image_url TEXT NOT NULL,
|
|
format_type TEXT NOT NULL DEFAULT 'png',
|
|
pack_name TEXT NULL,
|
|
tags TEXT NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_message_sticker_message_id
|
|
ON message_sticker (message_id);
|
|
|
|
-- models/message_forward.rs → message_forward
|
|
CREATE TABLE IF NOT EXISTS message_forward (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
message_id UUID NOT NULL REFERENCES message(id) ON DELETE CASCADE,
|
|
source_message_id UUID NOT NULL REFERENCES message(id) ON DELETE CASCADE,
|
|
source_channel_id UUID NOT NULL,
|
|
forwarded_by UUID NOT NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_message_forward_message_id
|
|
ON message_forward (message_id);
|
|
CREATE INDEX IF NOT EXISTS idx_message_forward_source_message_id
|
|
ON message_forward (source_message_id);
|
|
|
|
-- models/message_component.rs → message_component
|
|
CREATE TABLE IF NOT EXISTS message_component (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
message_id UUID NOT NULL REFERENCES message(id) ON DELETE CASCADE,
|
|
row INTEGER NOT NULL DEFAULT 0,
|
|
position INTEGER NOT NULL DEFAULT 0,
|
|
component_type TEXT NOT NULL,
|
|
custom_id TEXT NOT NULL,
|
|
label TEXT NULL,
|
|
emoji TEXT NULL,
|
|
style TEXT NULL,
|
|
url TEXT NULL,
|
|
disabled BOOLEAN NOT NULL DEFAULT FALSE,
|
|
placeholder TEXT NULL,
|
|
min_values INTEGER NULL,
|
|
max_values INTEGER NULL,
|
|
options JSONB NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_message_component_message_id
|
|
ON message_component (message_id);
|
|
|
|
COMMIT;
|