summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorilotterytea <iltsu@alright.party>2025-08-05 16:02:00 +0500
committerilotterytea <iltsu@alright.party>2025-08-05 16:02:00 +0500
commiteff7e73e18bb1083744542ecadfe6ce6ca5f1207 (patch)
treeb1b414f0013db6ec08bc0aa5de5e996f6763d89f
parent928d59e3083a276989a7e79f5e1cd926906e2c41 (diff)
feat: database schema
-rw-r--r--database.sql45
1 files changed, 45 insertions, 0 deletions
diff --git a/database.sql b/database.sql
new file mode 100644
index 0000000..c15b2f2
--- /dev/null
+++ b/database.sql
@@ -0,0 +1,45 @@
+CREATE TABLE IF NOT EXISTS servers (
+ id INTEGER PRIMARY KEY AUTO_INCREMENT,
+ host TEXT NOT NULL UNIQUE,
+ port INTEGER NOT NULL,
+ nick TEXT NOT NULL,
+ pass TEXT NOT NULL,
+ capabilities TEXT NOT NULL
+);
+
+CREATE TABLE IF NOT EXISTS rooms (
+ id INTEGER PRIMARY KEY AUTO_INCREMENT,
+ server_id INTEGER NOT NULL REFERENCES servers(id) ON DELETE CASCADE,
+ `name` TEXT NOT NULL UNIQUE,
+ joined_at TIMESTAMP NOT NULL DEFAULT UTC_TIMESTAMP(),
+ departed_at TIMESTAMP,
+ INDEX (`name`),
+ INDEX (id, server_id)
+);
+
+CREATE TABLE IF NOT EXISTS users (
+ id INTEGER PRIMARY KEY AUTO_INCREMENT,
+ server_id INTEGER NOT NULL REFERENCES servers(id) ON DELETE CASCADE,
+ nick TEXT NOT NULL,
+ joined_at TIMESTAMP NOT NULL DEFAULT UTC_TIMESTAMP(),
+ departed_at TIMESTAMP,
+ INDEX (nick),
+ INDEX (server_id)
+);
+
+CREATE TABLE IF NOT EXISTS messages (
+ id BIGINT PRIMARY KEY AUTO_INCREMENT,
+ room_id INTEGER NOT NULL REFERENCES rooms(id) ON DELETE CASCADE,
+ user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
+ command VARCHAR(32) NOT NULL,
+
+ params TEXT,
+ tags TEXT,
+
+ sent_at TIMESTAMP NOT NULL DEFAULT UTC_TIMESTAMP(),
+ INDEX (room_id),
+ INDEX (user_id),
+ INDEX (command),
+ INDEX (room_id, sent_at),
+ FULLTEXT INDEX ft_message (params)
+); \ No newline at end of file