summaryrefslogtreecommitdiff
path: root/migrations/20241026174345_init.sql
diff options
context:
space:
mode:
authorKyren223 <Kyren223@proton.me>2024-11-23 12:16:13 +0200
committerKyren223 <Kyren223@proton.me>2024-11-23 12:16:13 +0200
commite35d70b91dcf3c27d0ea628d2b02741e8868f27c (patch)
tree70230e2c8944a2fdc502d40cecb5b5fee7b20d0d /migrations/20241026174345_init.sql
parentd2b530aab3b0210515db35cad6ef0e0eb0bde61a (diff)
More schema changes
Diffstat (limited to 'migrations/20241026174345_init.sql')
-rw-r--r--migrations/20241026174345_init.sql44
1 files changed, 36 insertions, 8 deletions
diff --git a/migrations/20241026174345_init.sql b/migrations/20241026174345_init.sql
index 8f3e8a1..1494e50 100644
--- a/migrations/20241026174345_init.sql
+++ b/migrations/20241026174345_init.sql
@@ -5,7 +5,7 @@ CREATE TABLE messages (
content TEXT NOT NULL,
edited BOOLEAN NOT NULL CHECK (edited IN (0, 1)),
- frequency_id INT REFERENCES frequencies (id),
+ frequency_id INT REFERENCES frequencies (id) ON DELETE CASCADE,
receiver_id INT REFERENCES users (id),
CHECK (
@@ -17,8 +17,9 @@ CREATE TABLE messages (
CREATE TABLE users (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
- public_key BLOB NOT NULL,
- bio TEXT
+ public_key BLOB NOT NULL UNIQUE,
+ description TEXT,
+ is_public_dm BOOLEAN NOT NULL CHECK (is_public_dm IN (0, 1))
);
CREATE TABLE networks (
@@ -26,29 +27,56 @@ CREATE TABLE networks (
owner_id INT NOT NULL REFERENCES users (id),
name TEXT NOT NULL,
icon TEXT NOT NULL,
- bg TEXT NULL,
- fg TEXT NOT NULL
+ bg_hex_color TEXT,
+ fg_hex_color TEXT NOT NULL,
+ is_public BOOLEAN NOT NULL CHECK (is_public IN (0, 1))
);
CREATE TABLE frequencies (
id INTEGER PRIMARY KEY,
- network_id INT NOT NULL REFERENCES networks (id),
+ network_id INT NOT NULL REFERENCES networks (id) ON DELETE CASCADE,
name TEXT NOT NULL,
- color TEXT,
+ hex_color TEXT,
perms INT NOT NULL CHECK (perms IN (0, 1, 2)),
+ -- 0 rw admin | 1 r all w admin | 2 rw all
position INT NOT NULL
);
CREATE TABLE users_networks (
user_id INT NOT NULL REFERENCES users (id),
- network_id INT NOT NULL REFERENCES networks (id),
+ network_id INT NOT NULL REFERENCES networks (id) ON DELETE CASCADE,
+ joined_at TEXT NOT NULL DEFAULT current_timestamp,
is_admin BOOLEAN NOT NULL CHECK (is_admin IN (0, 1)),
PRIMARY KEY (user_id, network_id)
);
+CREATE TABLE user_trusted_users (
+ truster_user_id INT NOT NULL REFERENCES users (id),
+ trusted_user_id INT NOT NULL REFERENCES users (id),
+ trusted_public_key BLOB NOT NULL UNIQUE,
+ PRIMARY KEY (truster_user_id, trusted_user_id)
+);
+
+CREATE TABLE user_blocked_users (
+ blocker_user_id INT NOT NULL REFERENCES users (id),
+ blocked_user_id INT NOT NULL REFERENCES users (id),
+ PRIMARY KEY (blocker_user_id, blocked_user_id)
+);
+
+CREATE TABLE network_banned_users (
+ network_id INT NOT NULL REFERENCES networks (id) ON DELETE CASCADE,
+ banned_user_id INT NOT NULL REFERENCES users (id),
+ banned_at TEXT NOT NULL DEFAULT current_timestamp,
+ reason TEXT,
+ PRIMARY KEY (network_id, banned_user_id)
+);
+
-- +goose Down
DROP TABLE messages;
DROP TABLE users;
DROP TABLE networks;
DROP TABLE frequencies;
DROP TABLE users_networks;
+DROP TABLE user_trusted_users;
+DROP TABLE user_blocked_users;
+DROP TABLE network_banned_users;