# mautrix-signal - A Matrix-Signal puppeting bridge # Copyright (C) 2022 Tulir Asokan # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . from mautrix.util.async_db import Connection from . import upgrade_table @upgrade_table.register(description="Initial revision", upgrades_to=9) async def upgrade_latest(conn: Connection) -> None: await conn.execute( """CREATE TABLE portal ( chat_id TEXT, receiver TEXT, mxid TEXT, name TEXT, topic TEXT, encrypted BOOLEAN NOT NULL DEFAULT false, avatar_hash TEXT, avatar_url TEXT, name_set BOOLEAN NOT NULL DEFAULT false, avatar_set BOOLEAN NOT NULL DEFAULT false, revision INTEGER NOT NULL DEFAULT 0, expiration_time BIGINT, relay_user_id TEXT, PRIMARY KEY (chat_id, receiver) )""" ) await conn.execute( """CREATE TABLE "user" ( mxid TEXT PRIMARY KEY, username TEXT, uuid UUID, notice_room TEXT )""" ) await conn.execute( """CREATE TABLE puppet ( uuid UUID UNIQUE, number TEXT UNIQUE, name TEXT, avatar_hash TEXT, avatar_url TEXT, name_set BOOLEAN NOT NULL DEFAULT false, avatar_set BOOLEAN NOT NULL DEFAULT false, uuid_registered BOOLEAN NOT NULL DEFAULT false, number_registered BOOLEAN NOT NULL DEFAULT false, custom_mxid TEXT, access_token TEXT, next_batch TEXT, base_url TEXT )""" ) await conn.execute( """CREATE TABLE user_portal ( "user" TEXT, portal TEXT, portal_receiver TEXT, in_community BOOLEAN NOT NULL DEFAULT false, FOREIGN KEY (portal, portal_receiver) REFERENCES portal(chat_id, receiver) ON UPDATE CASCADE ON DELETE CASCADE )""" ) await conn.execute( """CREATE TABLE message ( mxid TEXT NOT NULL, mx_room TEXT NOT NULL, sender TEXT, timestamp BIGINT, signal_chat_id TEXT, signal_receiver TEXT, PRIMARY KEY (sender, timestamp, signal_chat_id, signal_receiver), FOREIGN KEY (signal_chat_id, signal_receiver) REFERENCES portal(chat_id, receiver) ON UPDATE CASCADE ON DELETE CASCADE, UNIQUE (mxid, mx_room) )""" ) await conn.execute( """CREATE TABLE reaction ( mxid TEXT NOT NULL, mx_room TEXT NOT NULL, signal_chat_id TEXT NOT NULL, signal_receiver TEXT NOT NULL, msg_author TEXT NOT NULL, msg_timestamp BIGINT NOT NULL, author TEXT NOT NULL, emoji TEXT NOT NULL, PRIMARY KEY (signal_chat_id, signal_receiver, msg_author, msg_timestamp, author), FOREIGN KEY (msg_author, msg_timestamp, signal_chat_id, signal_receiver) REFERENCES message(sender, timestamp, signal_chat_id, signal_receiver) ON DELETE CASCADE ON UPDATE CASCADE, UNIQUE (mxid, mx_room) )""" ) await conn.execute( """CREATE TABLE disappearing_message ( room_id TEXT, mxid TEXT, expiration_seconds BIGINT, expiration_ts BIGINT, PRIMARY KEY (room_id, mxid) )""" )