65 lines
1.9 KiB
MySQL
65 lines
1.9 KiB
MySQL
|
-- v0 -> v1: Latest revision
|
||
|
|
||
|
CREATE TABLE "user" (
|
||
|
-- only: postgres
|
||
|
rowid BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
|
||
|
-- only: sqlite
|
||
|
rowid INTEGER PRIMARY KEY,
|
||
|
|
||
|
mxid TEXT NOT NULL UNIQUE,
|
||
|
phone TEXT UNIQUE,
|
||
|
session jsonb,
|
||
|
|
||
|
management_room TEXT,
|
||
|
space_room TEXT,
|
||
|
|
||
|
access_token TEXT
|
||
|
);
|
||
|
|
||
|
CREATE TABLE puppet (
|
||
|
id TEXT NOT NULL,
|
||
|
receiver BIGINT NOT NULL,
|
||
|
phone TEXT NOT NULL,
|
||
|
name TEXT NOT NULL,
|
||
|
name_set BOOLEAN NOT NULL DEFAULT false,
|
||
|
avatar_id TEXT NOT NULL,
|
||
|
avatar_mxc TEXT NOT NULL,
|
||
|
avatar_set BOOLEAN NOT NULL DEFAULT false,
|
||
|
contact_info_set BOOLEAN NOT NULL DEFAULT false,
|
||
|
|
||
|
FOREIGN KEY (receiver) REFERENCES "user"(rowid) ON DELETE CASCADE,
|
||
|
UNIQUE (phone, receiver),
|
||
|
PRIMARY KEY (id, receiver)
|
||
|
);
|
||
|
|
||
|
CREATE TABLE portal (
|
||
|
id TEXT NOT NULL,
|
||
|
receiver BIGINT NOT NULL,
|
||
|
self_user TEXT,
|
||
|
other_user TEXT,
|
||
|
mxid TEXT UNIQUE,
|
||
|
name TEXT NOT NULL,
|
||
|
name_set BOOLEAN NOT NULL DEFAULT false,
|
||
|
avatar_id TEXT NOT NULL,
|
||
|
avatar_mxc TEXT NOT NULL,
|
||
|
avatar_set BOOLEAN NOT NULL DEFAULT false,
|
||
|
encrypted BOOLEAN NOT NULL DEFAULT false,
|
||
|
in_space BOOLEAN NOT NULL DEFAULT false,
|
||
|
|
||
|
FOREIGN KEY (receiver) REFERENCES "user"(rowid) ON DELETE CASCADE,
|
||
|
FOREIGN KEY (other_user, receiver) REFERENCES puppet(id, receiver) ON DELETE CASCADE,
|
||
|
PRIMARY KEY (id, receiver)
|
||
|
);
|
||
|
|
||
|
CREATE TABLE message (
|
||
|
conv_id TEXT NOT NULL,
|
||
|
conv_receiver BIGINT NOT NULL,
|
||
|
id TEXT NOT NULL,
|
||
|
mxid TEXT NOT NULL UNIQUE,
|
||
|
sender TEXT NOT NULL,
|
||
|
timestamp BIGINT NOT NULL,
|
||
|
|
||
|
PRIMARY KEY (conv_id, conv_receiver, id),
|
||
|
FOREIGN KEY (conv_id, conv_receiver) REFERENCES portal(id, receiver) ON DELETE CASCADE
|
||
|
);
|