server/config/scylla/message.cql
2024-10-13 13:31:58 +04:00

38 lines
1.4 KiB
SQL

CREATE TABLE messages (
chat_id UUID, -- Partition key
user_id UUID,
content text,
type text,
created_at timestamp, -- Clustering column
PRIMARY KEY (chat_id, content, type, created_at)
) WITH CLUSTERING ORDER BY (created_at DESC);
CREATE TABLE user_chats (
user_id UUID, -- Partition key
chat_id UUID, -- Clustering column
blocked boolean,
created_at timestamp,
PRIMARY KEY (user_id, chat_id, blocked, created_at)
);
CREATE MATERIALIZED VIEW chat_users AS
SELECT chat_id, user_id, blocked, created_at
FROM user_chats
WHERE chat_id IS NOT NULL AND user_id IS NOT NULL AND created_at IS NOT NULL
PRIMARY KEY (chat_id, user_id, blocked, created_at);
BEGIN BATCH
INSERT INTO messages (chat_id, user_id, content, type, created_at)
VALUES ('b9b29446-d50a-42d0-b3e2-bfaabd85fa4b', '8c796bf4-c9cd-4851-8379-6f67f69e1b99', 'Message 1', 'text', toTimestamp(now()))
IF EXISTS
AND (SELECT blocked FROM user_chats WHERE user_id = '8c796bf4-c9cd-4851-8379-6f67f69e1b99' AND
chat_id = 'b9b29446-d50a-42d0-b3e2-bfaabd85fa4b') = false;
APPLY BATCH;
INSERT INTO user_chats (user_id, chat_id, blocked, created_at) VALUES (uuid(), uuid(), false, toTimestamp(now()));
INSERT INTO messages (chat_id, user_id, content, type, created_at, year_month, seen)
VALUES (uuid(), uuid(), 'Your message content', 'text', toTimestamp(now()), '2020-01');
SELECT * FROM messages LIMIT 1;