Files
payphone/src/database/migrations/0001_init.cql
T

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
);