1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
-- +goose Up
CREATE TABLE messages (
id INTEGER PRIMARY KEY,
sender_id INT NOT NULL REFERENCES users (id),
content TEXT NOT NULL,
edited BOOLEAN NOT NULL CHECK (edited IN (0, 1)),
frequency_id INT REFERENCES frequencies (id),
receiver_id INT REFERENCES users (id),
CHECK (
(frequency_id IS NOT NULL AND receiver_id IS NULL) OR
(frequency_id IS NULL AND receiver_id IS NOT NULL)
)
);
CREATE TABLE users (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
public_key BLOB NOT NULL,
bio TEXT
);
CREATE TABLE networks (
id INTEGER PRIMARY KEY,
owner_id INT NOT NULL REFERENCES users (id),
name TEXT NOT NULL,
icon TEXT NOT NULL,
bg TEXT NULL,
fg TEXT NOT NULL
);
CREATE TABLE frequencies (
id INTEGER PRIMARY KEY,
network_id INT NOT NULL REFERENCES networks (id),
name TEXT NOT NULL,
color TEXT,
perms INT NOT NULL CHECK (perms IN (0, 1, 2)),
position INT NOT NULL
);
CREATE TABLE users_networks (
user_id INT NOT NULL REFERENCES users (id),
network_id INT NOT NULL REFERENCES networks (id),
is_admin BOOLEAN NOT NULL CHECK (is_admin IN (0, 1)),
PRIMARY KEY (user_id, network_id)
);
-- +goose Down
DROP TABLE messages;
DROP TABLE users;
DROP TABLE networks;
DROP TABLE frequencies;
DROP TABLE users_networks;
|