38 lines
1.4 KiB
SQL
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;
|