-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathschema.sql
More file actions
105 lines (94 loc) · 2.96 KB
/
schema.sql
File metadata and controls
105 lines (94 loc) · 2.96 KB
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
CREATE EXTENSION IF NOT EXISTS "pgcrypto";
CREATE TABLE USERS (
user_id UUID DEFAULT gen_random_uuid() NOT NULL,
firstname VARCHAR(100) NOT NULL,
lastname VARCHAR(100) NOT NULL,
email VARCHAR(255) NOT NULL CONSTRAINT UK_USERS_EMAIL UNIQUE,
password VARCHAR(255) NOT NULL,
created_at TIMESTAMPTZ NOT NULL,
updated_at TIMESTAMPTZ,
PRIMARY KEY (user_id)
);
CREATE TABLE ROLES (
role_id INT GENERATED ALWAYS AS IDENTITY,
label VARCHAR(50) NOT NULL,
PRIMARY KEY (role_id)
);
CREATE TABLE BOARDS (
board_id INT GENERATED ALWAYS AS IDENTITY,
label VARCHAR(50) NOT NULL,
created_at TIMESTAMPTZ NOT NULL,
PRIMARY KEY (board_id)
);
CREATE TABLE USER_BOARDS (
user_id UUID NOT NULL,
board_id INT NOT NULL,
role_id INT NOT NULL,
PRIMARY KEY (user_id, board_id),
FOREIGN KEY (user_id) REFERENCES USERS(user_id) ON DELETE CASCADE,
FOREIGN KEY (board_id) REFERENCES BOARDS(board_id) ON DELETE CASCADE,
FOREIGN KEY (role_id) REFERENCES ROLES(role_id)
);
CREATE TABLE WEBHOOKS (
webhook_id INT GENERATED ALWAYS AS IDENTITY,
webhook_type VARCHAR(50) NOT NULL,
link VARCHAR(255) NOT NULL,
is_active BOOLEAN NOT NULL DEFAULT TRUE,
board_id INT NOT NULL,
PRIMARY KEY (webhook_id),
FOREIGN KEY (board_id) REFERENCES BOARDS(board_id) ON DELETE CASCADE
);
CREATE TABLE COLUMNS (
column_id INT GENERATED ALWAYS AS IDENTITY,
label VARCHAR(50) NOT NULL,
position INT NOT NULL,
board_id INT NOT NULL,
PRIMARY KEY (column_id),
FOREIGN KEY (board_id) REFERENCES BOARDS(board_id) ON DELETE CASCADE
);
CREATE TABLE CARDS (
card_id INT GENERATED ALWAYS AS IDENTITY,
label VARCHAR(50) NOT NULL,
position INT NOT NULL,
is_archived BOOLEAN NOT NULL DEFAULT FALSE,
created_at TIMESTAMPTZ NOT NULL,
updated_at TIMESTAMPTZ,
start_date TIMESTAMPTZ,
end_date TIMESTAMPTZ,
column_id INT NOT NULL,
board_id INT NOT NULL,
PRIMARY KEY (card_id),
FOREIGN KEY (column_id) REFERENCES COLUMNS(column_id) ON DELETE CASCADE,
FOREIGN KEY (board_id) REFERENCES BOARDS(board_id)
);
CREATE TABLE TAGS (
tag_id INT GENERATED ALWAYS AS IDENTITY,
label VARCHAR(50) NOT NULL,
board_id INT NOT NULL,
PRIMARY KEY (tag_id),
FOREIGN KEY (board_id) REFERENCES BOARDS(board_id) ON DELETE CASCADE
);
CREATE TABLE CARD_TAGS (
tag_id INT NOT NULL,
card_id INT NOT NULL,
PRIMARY KEY (tag_id, card_id),
FOREIGN KEY (tag_id) REFERENCES TAGS(tag_id) ON DELETE CASCADE,
FOREIGN KEY (card_id) REFERENCES CARDS(card_id) ON DELETE CASCADE
);
CREATE TABLE CARD_HISTORIES (
history_id INT GENERATED ALWAYS AS IDENTITY,
action_type VARCHAR(50) NOT NULL,
created_at TIMESTAMPTZ NOT NULL,
card_id INT NOT NULL,
user_id UUID NOT NULL,
PRIMARY KEY (history_id),
FOREIGN KEY (card_id) REFERENCES CARDS(card_id) ON DELETE CASCADE,
FOREIGN KEY (user_id) REFERENCES USERS(user_id) ON DELETE CASCADE
);
CREATE TABLE USER_CARDS (
user_id UUID NOT NULL,
card_id INT NOT NULL,
PRIMARY KEY(user_id, card_id),
FOREIGN KEY (card_id) REFERENCES CARDS(card_id) ON DELETE CASCADE,
FOREIGN KEY (user_id) REFERENCES USERS(user_id) ON DELETE CASCADE
);