153 lines
3.0 KiB
Cassandra CQL
153 lines
3.0 KiB
Cassandra CQL
CREATE KEYSPACE IF NOT EXISTS payphone
|
|
WITH replication = {
|
|
'class': 'NetworkTopologyStrategy',
|
|
'replication_factor': 3
|
|
} AND TABLETS = {
|
|
'enabled': false
|
|
};
|
|
CREATE TYPE IF NOT EXISTS payphone.message (
|
|
id BIGINT,
|
|
|
|
author_id BIGINT,
|
|
author_name TEXT,
|
|
author_avatar_url TEXT,
|
|
author_mask ASCII,
|
|
|
|
content TEXT,
|
|
attachments LIST<TEXT>,
|
|
sticker BIGINT,
|
|
|
|
propagation_message_id BIGINT,
|
|
propagation_channel_id BIGINT,
|
|
|
|
replying_to_id,
|
|
|
|
is_deleted BOOLEAN,
|
|
is_edited BOOLEAN,
|
|
is_censored BOOLEAN,
|
|
);
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS payphone.users (
|
|
user_id BIGINT PRIMARY KEY,
|
|
|
|
name TEXT,
|
|
email TEXT,
|
|
|
|
is_masked BOOLEAN,
|
|
is_moderator BOOLEAN,
|
|
|
|
joined_at TIMESTAMP,
|
|
last_seen_at TIMESTAMP,
|
|
supporter_since TIMESTAMP,
|
|
supporter_until TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS payphone.calls (
|
|
call_id BIGINT PRIMARY KEY,
|
|
|
|
channel_ids LIST<BIGINT>,
|
|
|
|
started_at TIMESTAMP,
|
|
finished_at TIMESTAMP,
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS payphone.channels (
|
|
channel_id BIGINT PRIMARY KEY,
|
|
server_id BIGINT,
|
|
|
|
call_id BIGINT,
|
|
is_searching BOOLEAN,
|
|
|
|
recently_called_server_ids LIST<BIGINT>,
|
|
|
|
webhook_id BIGINT,
|
|
webhook_token TEXT
|
|
);
|
|
|
|
CREATE MATERIALIZED VIEW IF NOT EXISTS payphone.searching_channels AS
|
|
SELECT channel_id, server_id, is_searching, recently_called_server_ids FROM payphone.channels
|
|
WHERE channel_id IS NOT NULL AND is_searching = true
|
|
PRIMARY KEY (is_searching, channel_id);
|
|
|
|
CREATE TABLE IF NOT EXISTS payphone.participants (
|
|
call_id BIGINT,
|
|
user_id BIGINT,
|
|
channel_id BIGINT,
|
|
|
|
user_name TEXT,
|
|
user_avatar_url TEXT,
|
|
user_mask TEXT,
|
|
|
|
PRIMARY KEY (call_id, user_id, channel_id)
|
|
);
|
|
|
|
-- TTL 30 days.
|
|
CREATE TABLE IF NOT EXISTS payphone.messages (
|
|
call_id BIGINT,
|
|
message_id BIGINT,
|
|
|
|
data FROZEN<payphone.message>,
|
|
|
|
PRIMARY KEY (call_id, message_id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS payphone.servers (
|
|
server_id BIGINT PRIMARY KEY,
|
|
|
|
name TEXT,
|
|
prefix TEXT,
|
|
);
|
|
CREATE TABLE IF NOT EXISTS payphone.reports (
|
|
report_id BIGINT,
|
|
|
|
message FROZEN<payphone.message>,
|
|
replying_to FROZEN<payphone.message>,
|
|
|
|
created_at TIMESTAMP,
|
|
reviewed_at TIMESTAMP,
|
|
|
|
created_by_ids SET<BIGINT>,
|
|
|
|
reviewed_by_id BIGINT,
|
|
resolution ASCII,
|
|
|
|
PRIMARY KEY (message_author_id, report_id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS payphone.user_incidents (
|
|
user_id BIGINT,
|
|
incident_id BIGINT,
|
|
|
|
-- ban, warning
|
|
type ASCII,
|
|
|
|
call_id BIGINT,
|
|
report_id BIGINT,
|
|
|
|
message FROZEN<payphone.message>,
|
|
replying_to FROZEN<payphone.message>,
|
|
|
|
reason TEXT,
|
|
|
|
created_by_id BIGINT,
|
|
|
|
created_at TIMESTAMP,
|
|
expires_at TIMESTAMP,
|
|
duration ASCII,
|
|
|
|
PRIMARY KEY (user_id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS payphone.server_incidents (
|
|
server_id BIGINT PRIMARY KEY,
|
|
incident_id BIGINT,
|
|
|
|
reason TEXT,
|
|
|
|
created_by_id BIGINT,
|
|
|
|
created_at TIMESTAMP,
|
|
expires_at TIMESTAMP,
|
|
duration ASCII
|
|
); |