-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdatabase.sql
More file actions
230 lines (215 loc) · 7.83 KB
/
Copy pathdatabase.sql
File metadata and controls
230 lines (215 loc) · 7.83 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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";
-- ========================
-- TABLE: users
-- ========================
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
phone VARCHAR(20) NOT NULL UNIQUE,
name VARCHAR(100) NOT NULL,
bio TEXT,
avatar VARCHAR(255) DEFAULT 'default.png',
status ENUM('online','offline','away') DEFAULT 'offline',
last_seen DATETIME DEFAULT CURRENT_TIMESTAMP,
dark_mode TINYINT(1) DEFAULT 0,
password_hash VARCHAR(255) NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ========================
-- TABLE: conversations
-- ========================
CREATE TABLE conversations (
id INT AUTO_INCREMENT PRIMARY KEY,
type ENUM('direct','group','channel') DEFAULT 'direct',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
group_name VARCHAR(100),
group_avatar VARCHAR(255),
group_description TEXT,
group_created_by INT,
channel_description TEXT,
channel_avatar VARCHAR(255),
channel_public TINYINT(1) DEFAULT 1,
channel_subscribers INT DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ========================
-- TABLE: conversation_participants
-- ========================
CREATE TABLE conversation_participants (
id INT AUTO_INCREMENT PRIMARY KEY,
conversation_id INT NOT NULL,
user_id INT NOT NULL,
status ENUM('pending','accepted','spam','blocked','deleted') DEFAULT 'pending',
joined_at DATETIME DEFAULT CURRENT_TIMESTAMP,
role ENUM('member','moderator','admin') DEFAULT 'member',
deleted_at DATETIME NULL,
banned_at DATETIME NULL,
banned_by INT NULL,
ban_reason VARCHAR(255),
UNIQUE (conversation_id, user_id),
FOREIGN KEY (conversation_id) REFERENCES conversations(id) ON DELETE CASCADE,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ========================
-- TABLE: contacts
-- ========================
CREATE TABLE contacts (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
contact_phone VARCHAR(20) NOT NULL,
contact_user_id INT NULL,
nickname VARCHAR(100),
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ========================
-- TABLE: messages
-- ========================
CREATE TABLE messages (
id INT AUTO_INCREMENT PRIMARY KEY,
conversation_id INT NOT NULL,
sender_id INT NOT NULL,
type ENUM('text','image','video','file','voice','system') DEFAULT 'text',
content TEXT,
file_path VARCHAR(255),
file_name VARCHAR(255),
file_size INT,
reply_to INT,
is_deleted TINYINT(1) DEFAULT 0,
is_edited TINYINT(1) DEFAULT 0,
edited_at DATETIME NULL,
sent_at DATETIME DEFAULT CURRENT_TIMESTAMP,
duration INT,
FOREIGN KEY (conversation_id) REFERENCES conversations(id) ON DELETE CASCADE,
FOREIGN KEY (sender_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (reply_to) REFERENCES messages(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ========================
-- TABLE: message_reads
-- ========================
CREATE TABLE message_reads (
id INT AUTO_INCREMENT PRIMARY KEY,
message_id INT NOT NULL,
user_id INT NOT NULL,
read_at DATETIME DEFAULT CURRENT_TIMESTAMP,
UNIQUE (message_id, user_id),
FOREIGN KEY (message_id) REFERENCES messages(id) ON DELETE CASCADE,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ========================
-- TABLE: message_reactions
-- ========================
CREATE TABLE message_reactions (
id INT AUTO_INCREMENT PRIMARY KEY,
message_id INT NOT NULL,
user_id INT NOT NULL,
emoji VARCHAR(10) NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
UNIQUE (message_id, user_id),
FOREIGN KEY (message_id) REFERENCES messages(id) ON DELETE CASCADE,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ========================
-- TABLE: calls
-- ========================
CREATE TABLE calls (
id INT AUTO_INCREMENT PRIMARY KEY,
caller_id INT NOT NULL,
callee_id INT NOT NULL,
conversation_id INT NOT NULL,
status ENUM('ringing','accepted','rejected','ended','missed','busy') DEFAULT 'ringing',
started_at DATETIME NULL,
ended_at DATETIME NULL,
duration INT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
call_type ENUM('audio','video') DEFAULT 'audio',
FOREIGN KEY (caller_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (callee_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (conversation_id) REFERENCES conversations(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ========================
-- TABLE: call_signals
-- ========================
CREATE TABLE call_signals (
id INT AUTO_INCREMENT PRIMARY KEY,
call_id INT NOT NULL,
from_user INT NOT NULL,
to_user INT NOT NULL,
signal_type ENUM('offer','answer','ice_candidate','hangup') NOT NULL,
payload LONGTEXT NOT NULL,
processed TINYINT(1) DEFAULT 0,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (call_id) REFERENCES calls(id) ON DELETE CASCADE,
FOREIGN KEY (from_user) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (to_user) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ========================
-- TABLE: blocks
-- ========================
CREATE TABLE blocks (
id INT AUTO_INCREMENT PRIMARY KEY,
blocker_id INT NOT NULL,
blocked_id INT NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
UNIQUE (blocker_id, blocked_id),
FOREIGN KEY (blocker_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (blocked_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ========================
-- TABLE: reports
-- ========================
CREATE TABLE reports (
id INT AUTO_INCREMENT PRIMARY KEY,
reporter_id INT NOT NULL,
reported_user_id INT NULL,
conversation_id INT NULL,
message_id INT NULL,
reason ENUM('spam','harassment','inappropriate','fake','other') NOT NULL,
description TEXT,
status ENUM('pending','reviewed','resolved') DEFAULT 'pending',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (reporter_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (reported_user_id) REFERENCES users(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ========================
-- TABLE: statuses
-- ========================
CREATE TABLE statuses (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
type ENUM('text','image','video') DEFAULT 'text',
content TEXT,
file_path VARCHAR(255),
bg_color VARCHAR(20) DEFAULT '#1DA1F2',
text_color VARCHAR(20) DEFAULT '#ffffff',
font_style VARCHAR(50) DEFAULT 'normal',
expires_at DATETIME,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ========================
-- TABLE: status_views
-- ========================
CREATE TABLE status_views (
id INT AUTO_INCREMENT PRIMARY KEY,
status_id INT NOT NULL,
viewer_id INT NOT NULL,
viewed_at DATETIME DEFAULT CURRENT_TIMESTAMP,
UNIQUE (status_id, viewer_id),
FOREIGN KEY (status_id) REFERENCES statuses(id) ON DELETE CASCADE,
FOREIGN KEY (viewer_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ========================
-- TABLE: channel_subscribers
-- ========================
CREATE TABLE channel_subscribers (
id INT AUTO_INCREMENT PRIMARY KEY,
channel_id INT NOT NULL,
user_id INT NOT NULL,
role ENUM('subscriber','moderator','admin') DEFAULT 'subscriber',
joined_at DATETIME DEFAULT CURRENT_TIMESTAMP,
UNIQUE (channel_id, user_id),
FOREIGN KEY (channel_id) REFERENCES conversations(id) ON DELETE CASCADE,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
COMMIT;