You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
synctv/migrations/20260426043_create_chat_mes...

22 lines
1.0 KiB
SQL

CREATE TABLE IF NOT EXISTS chat_message_mentions (
room_id BIGINT NOT NULL,
message_id BIGINT NOT NULL,
message_created_at TIMESTAMPTZ NOT NULL,
mentioned_user_id BIGINT NOT NULL,
start_char INTEGER NOT NULL,
length_chars INTEGER NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (room_id, message_id, message_created_at, start_char, mentioned_user_id),
CHECK (start_char >= 0),
CHECK (length_chars > 0),
FOREIGN KEY (room_id) REFERENCES rooms(id) ON DELETE CASCADE,
FOREIGN KEY (mentioned_user_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (room_id, message_id, message_created_at)
REFERENCES chat_messages(room_id, id, created_at) ON DELETE CASCADE
);
CREATE INDEX IF NOT EXISTS idx_chat_message_mentions_user
ON chat_message_mentions(room_id, mentioned_user_id, created_at DESC);
CREATE INDEX IF NOT EXISTS idx_chat_message_mentions_message
ON chat_message_mentions(message_id, message_created_at, start_char, mentioned_user_id);