whatsxmpp/schema.sql
eta c36d61687a Message Archive Management (MAM) support for groupchats
- Groupchats now support XEP-0313 Message Archive Management (MAM)!
- This uses the history stored in the sqlite database, as implemented in the
  previous commits.
  - The QUERY-ARCHIVE megafunction builds up a SQL query to get stuff out of the
    database, in accordance with provided MAM + RSM parameters.
- Notably, various hacks are in here that need to be fixed.
  - IQ 'set's are now processed, which means we needed to add a stub impl of
    Schrödinger's Chat so people don't drop out of MUCs all of a sudden.
    (Well, it just responds to every ping indiscriminately...)
  - Oh also the new presence subscription stuff from earlier is borked.
2020-09-27 23:01:40 +01:00

77 lines
2 KiB
SQL

CREATE TABLE configuration (
rev INT PRIMARY KEY,
server VARCHAR NOT NULL,
port INT NOT NULL,
component_name VARCHAR NOT NULL,
shared_secret VARCHAR NOT NULL,
upload_component_name VARCHAR NOT NULL
);
CREATE TABLE users (
id INTEGER PRIMARY KEY,
jid VARCHAR UNIQUE NOT NULL,
session_data VARCHAR
);
CREATE TABLE user_contacts (
id INTEGER PRIMARY KEY,
user_id INT NOT NULL REFERENCES users,
wa_jid VARCHAR UNIQUE NOT NULL,
subscription_state VARCHAR NOT NULL DEFAULT 'none',
avatar_url VARCHAR,
name VARCHAR,
notify VARCHAR,
status VARCHAR
);
CREATE TABLE user_messages (
id INTEGER PRIMARY KEY,
user_id INT NOT NULL REFERENCES users,
xmpp_id VARCHAR NOT NULL,
wa_id VARCHAR NOT NULL,
UNIQUE(user_id, wa_id)
);
CREATE TABLE avatar_data (
avatar_url VARCHAR NOT NULL PRIMARY KEY,
sha1 VARCHAR NOT NULL,
image BLOB NOT NULL
);
CREATE TABLE user_chats (
id INTEGER PRIMARY KEY,
user_id INT NOT NULL REFERENCES users,
wa_jid VARCHAR NOT NULL,
user_resource VARCHAR,
invitation_state VARCHAR NOT NULL DEFAULT 'none',
subject VARCHAR
);
CREATE TABLE user_chat_members (
id INTEGER PRIMARY KEY,
chat_id INT NOT NULL REFERENCES user_chats,
wa_jid VARCHAR NOT NULL,
resource VARCHAR NOT NULL,
affiliation VARCHAR NOT NULL DEFAULT 'member'
);
CREATE TABLE user_chat_joined (
id INTEGER PRIMARY KEY,
chat_id INT NOT NULL REFERENCES user_chats,
jid VARCHAR NOT NULL
);
CREATE TABLE user_chat_history (
id INTEGER PRIMARY KEY,
user_id INT NOT NULL REFERENCES users,
chat_id INT NOT NULL REFERENCES user_chats,
user_from VARCHAR NOT NULL,
ts_unix INT NOT NULL,
xmpp_id VARCHAR NOT NULL,
orig_id VARCHAR,
body VARCHAR NOT NULL,
oob_url VARCHAR
);
CREATE UNIQUE INDEX user_chat_history_unique ON user_chat_history (user_id, chat_id, xmpp_id);