1
+ CREATE TABLE users
2
+ (
3
+ id uuid PRIMARY KEY ,
4
+ created_at timestamptz NOT NULL ,
5
+ updated_at timestamptz ,
6
+ username varchar (50 ) NOT NULL ,
7
+ email varchar (100 ) NOT NULL ,
8
+ password varchar (60 ) NOT NULL ,
9
+ profile_id uuid,
10
+ UNIQUE (username, email)
11
+ );
12
+
13
+ CREATE TABLE binary_contents
14
+ (
15
+ id uuid PRIMARY KEY ,
16
+ created_at timestamptz NOT NULL ,
17
+ file_name varchar (255 ) NOT NULL ,
18
+ size bigint NOT NULL ,
19
+ content_type varchar (100 ) NOT NULL ,
20
+ bytes bytea NOT NULL
21
+ );
22
+
23
+
24
+ CREATE TABLE channels
25
+ (
26
+ id uuid PRIMARY KEY ,
27
+ created_at timestamptz NOT NULL ,
28
+ updated_at timestamptz ,
29
+ name varchar (100 ),
30
+ description varchar (500 ),
31
+ type varchar (10 ) NOT NULL
32
+ -- CONSTRAINT channels_pkey PRIMARY KEY (id),
33
+ -- CONSTRAINT channels_type_check
34
+ -- CHECK (type::text = ANY
35
+ -- (ARRAY ['PUBLIC'::character varying, 'PRIVATE'::character varying]::text[]))
36
+ );
37
+
38
+ CREATE TABLE messages
39
+ (
40
+ id uuid PRIMARY KEY ,
41
+ created_at timestamptz NOT NULL ,
42
+ updated_at timestamptz NOT NULL ,
43
+ content text ,
44
+ channel_id uuid NOT NULL ,
45
+ author_id uuid
46
+ -- CONSTRAINT messages_pkey PRIMARY KEY (id),
47
+ -- CONSTRAINT fk_author FOREIGN KEY (author_id)
48
+ -- REFERENCES public.users (id) MATCH SIMPLE
49
+ -- ON UPDATE NO ACTION
50
+ -- ON DELETE SET NULL,
51
+ -- CONSTRAINT fk_channel FOREIGN KEY (channel_id)
52
+ -- REFERENCES public.channels (id) MATCH SIMPLE
53
+ -- ON UPDATE NO ACTION
54
+ -- ON DELETE CASCADE
55
+ );
56
+
57
+ CREATE TABLE read_statuses
58
+ (
59
+ id uuid PRIMARY KEY ,
60
+ created_at timestamptz NOT NULL ,
61
+ updated_at timestamptz ,
62
+ user_id uuid NOT NULL ,
63
+ last_read_at timestamptz NOT NULL ,
64
+ channel_id uuid NOT NULL ,
65
+ UNIQUE (user_id, channel_id)
66
+ -- CONSTRAINT read_statuses_pkey PRIMARY KEY (id),
67
+ -- CONSTRAINT read_statuses_channel_id_key UNIQUE (channel_id),
68
+ -- CONSTRAINT unique_user_id UNIQUE (user_id),
69
+ -- CONSTRAINT fk_channel_id FOREIGN KEY (channel_id)
70
+ -- REFERENCES public.channels (id) MATCH SIMPLE
71
+ -- ON UPDATE NO ACTION
72
+ -- ON DELETE CASCADE,
73
+ -- CONSTRAINT fk_user_id FOREIGN KEY (user_id)
74
+ -- REFERENCES public.users (id) MATCH SIMPLE
75
+ -- ON UPDATE NO ACTION
76
+ -- ON DELETE CASCADE
77
+ );
78
+
79
+
80
+ CREATE TABLE user_statuses
81
+ (
82
+ id uuid PRIMARY KEY ,
83
+ created_at timestamptz NOT NULL ,
84
+ updated_at timestamptz ,
85
+ user_id uuid UNIQUE NOT NULL ,
86
+ last_active_at timestamptz NOT NULL
87
+ -- CONSTRAINT user_statuses_pkey PRIMARY KEY (id),
88
+ -- CONSTRAINT user_statuses_user_id_key UNIQUE (user_id),
89
+ -- CONSTRAINT user_statuses_user_id_fkey FOREIGN KEY (user_id)
90
+ -- REFERENCES public.users (id) MATCH SIMPLE
91
+ -- ON UPDATE NO ACTION
92
+ -- ON DELETE CASCADE
93
+ );
94
+
95
+
96
+
97
+ CREATE TABLE message_attachments
98
+ (
99
+ message_id uuid,
100
+ attachment_id uuid,
101
+ PRIMARY KEY (message_id, attachment_id)
102
+ -- CONSTRAINT fk_attachment FOREIGN KEY (attachment_id)
103
+ -- REFERENCES public.binary_contents (id) MATCH SIMPLE
104
+ -- ON UPDATE NO ACTION
105
+ -- ON DELETE CASCADE,
106
+ -- CONSTRAINT fk_message FOREIGN KEY (message_id)
107
+ -- REFERENCES public.messages (id) MATCH SIMPLE
108
+ -- ON UPDATE NO ACTION
109
+ -- ON DELETE CASCADE
110
+ );
111
+
112
+ ALTER TABLE users
113
+ ADD CONSTRAINT fk_user_binary_content
114
+ FOREIGN KEY (profile_id)
115
+ REFERENCES binary_content (id)
116
+ ON DELETE SET NULL
0 commit comments