-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDeploymentScript.sql
More file actions
421 lines (332 loc) · 9.11 KB
/
DeploymentScript.sql
File metadata and controls
421 lines (332 loc) · 9.11 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
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
USE GameStatsApp;
-- ALTER DATABASE GameStatsApp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
/*********************************************/
-- create/alter tables
/*********************************************/
-- tbl_User
DROP TABLE IF EXISTS tbl_User;
CREATE TABLE tbl_User(
ID int NOT NULL AUTO_INCREMENT,
Username varchar(255) NOT NULL,
Email varchar(100) NOT NULL,
`Password` varchar(255) NOT NULL,
PromptToChange bit NOT NULL,
Locked bit NOT NULL,
Active bit NOT NULL,
Deleted bit NOT NULL,
CreatedBy int NOT NULL,
CreatedDate datetime NOT NULL,
ModifiedBy int NULL,
ModifiedDate datetime NULL,
PRIMARY KEY (ID)
);
-- tbl_User_Setting
DROP TABLE IF EXISTS tbl_User_Setting;
CREATE TABLE tbl_User_Setting(
UserID int NOT NULL,
IsDarkTheme bit NOT NULL,
PRIMARY KEY (UserID)
);
-- tbl_UserAccount
DROP TABLE IF EXISTS tbl_UserAccount;
CREATE TABLE tbl_UserAccount(
ID int NOT NULL AUTO_INCREMENT,
UserID int NOT NULL,
AccountTypeID INT NOT NULL,
AccountUserID varchar (800) NULL,
AccountUserHash varchar (800) NULL,
ImportLastRunDate datetime NULL,
CreatedDate datetime NOT NULL,
ModifiedDate datetime NULL,
PRIMARY KEY (ID)
);
-- tbl_UserAccount_Token
DROP TABLE IF EXISTS tbl_UserAccount_Token;
CREATE TABLE tbl_UserAccount_Token(
ID int NOT NULL AUTO_INCREMENT,
UserAccountID int NOT NULL,
TokenTypeID INT NOT NULL,
Token varchar (5000) NOT NULL,
IssuedDate datetime NULL,
ExpireDate datetime NULL,
PRIMARY KEY (ID)
);
-- tbl_UserList
DROP TABLE IF EXISTS tbl_UserList;
CREATE TABLE tbl_UserList
(
ID int NOT NULL AUTO_INCREMENT,
UserID int NOT NULL,
Name varchar (100) NOT NULL,
DefaultListID int NULL,
UserAccountID int NULL,
SortOrder int NULL,
Active bit NOT NULL,
Deleted bit NOT NULL,
CreatedDate datetime NOT NULL,
ModifiedDate datetime NULL,
PRIMARY KEY (ID)
);
-- tbl_UserList_Game
DROP TABLE IF EXISTS tbl_UserList_Game;
CREATE TABLE tbl_UserList_Game
(
ID int NOT NULL AUTO_INCREMENT,
UserListID int NOT NULL,
GameID int NOT NULL,
SortOrder int NULL,
PRIMARY KEY (ID)
);
-- tbl_DefaultList
DROP TABLE IF EXISTS tbl_DefaultList;
CREATE TABLE tbl_DefaultList
(
ID int NOT NULL,
Name varchar (100) NOT NULL,
PRIMARY KEY (ID)
);
-- tbl_AccountType
DROP TABLE IF EXISTS tbl_AccountType;
CREATE TABLE tbl_AccountType
(
ID int NOT NULL,
Name varchar (25) NOT NULL,
PRIMARY KEY (ID)
);
-- tbl_Game
DROP TABLE IF EXISTS tbl_Game;
CREATE TABLE tbl_Game
(
ID int NOT NULL AUTO_INCREMENT,
Name varchar (255) NOT NULL,
ReleaseDate datetime NULL,
GameCategoryID int NOT NULL,
CoverImageUrl varchar (250) NULL,
CoverImagePath varchar(250) NULL,
CreatedDate datetime NOT NULL DEFAULT (UTC_TIMESTAMP),
ModifiedDate datetime NULL,
PRIMARY KEY (ID)
);
CREATE INDEX IDX_tbl_Game_ReleaseDate ON tbl_Game (ReleaseDate);
-- tbl_Game_IGDBID
DROP TABLE IF EXISTS tbl_Game_IGDBID;
CREATE TABLE tbl_Game_IGDBID
(
GameID int NOT NULL,
IGDBID int NOT NULL,
PRIMARY KEY (GameID)
);
-- tbl_Setting
DROP TABLE IF EXISTS tbl_Setting;
CREATE TABLE tbl_Setting
(
ID int NOT NULL AUTO_INCREMENT,
Name varchar (50) NOT NULL,
Str varchar (500) NULL,
Num int NULL,
Dte datetime NULL,
PRIMARY KEY (ID)
);
/*********************************************/
-- create/alter views
/*********************************************/
-- vw_User
DROP VIEW IF EXISTS vw_User;
CREATE DEFINER=`root`@`localhost` VIEW vw_User AS
SELECT ua.ID AS UserID,
ua.Username,
ua.Email,
ua.`Password`,
ua.PromptToChange,
ua.Locked,
ua.Active,
ua.Deleted,
ua.CreatedBy,
ua.CreatedDate,
ua.ModifiedBy,
ua.ModifiedDate,
ue.IsDarkTheme
FROM tbl_User ua
LEFT JOIN tbl_User_Setting ue ON ue.UserID = ua.ID
WHERE ua.Deleted = 0;
-- vw_UserList
DROP VIEW IF EXISTS vw_UserList;
CREATE DEFINER=`root`@`localhost` VIEW vw_UserList AS
SELECT ul.ID,
ul.UserID,
ul.Name,
ul.DefaultListID,
ua.ID AS UserAccountID,
ua.AccountTypeID,
ul.Active,
ul.SortOrder
FROM tbl_UserList ul
LEFT JOIN tbl_UserAccount ua ON ua.ID = ul.UserAccountID
LEFT JOIN LATERAL (
SELECT GROUP_CONCAT(CONVERT(gl.GameID,CHAR) ORDER BY gl.ID SEPARATOR ',') Value
FROM tbl_UserList_Game gl
WHERE gl.UserListID = ul.ID
) GameIDs ON TRUE
WHERE ul.Deleted = 0;
-- vw_Game
DROP VIEW IF EXISTS vw_Game;
CREATE DEFINER=`root`@`localhost` VIEW vw_Game AS
SELECT g.ID,
g.Name,
COALESCE(g.CoverImageUrl, DefaultGameCoverImagePath.Value) AS CoverImagePath,
g.GameCategoryID,
g.ReleaseDate
FROM tbl_Game g
LEFT JOIN LATERAL (
SELECT ts.Str AS Value
FROM tbl_Setting ts
WHERE ts.Name = 'DefaultGameCoverImagePath'
LIMIT 1
) DefaultGameCoverImagePath ON TRUE;
-- vw_UserListGame
DROP VIEW IF EXISTS vw_UserListGame;
CREATE DEFINER=`root`@`localhost` VIEW vw_UserListGame AS
SELECT DISTINCT g.ID,
g.Name,
COALESCE(g.CoverImageUrl, DefaultGameCoverImagePath.Value) AS CoverImagePath,
UserListIDs.Value AS UserListIDs,
ug.ID AS UserListGameID,
ul.ID AS UserListID,
ul.Active AS UserListActive,
ul.UserID,
COALESCE(ug.SortOrder, ug.ID) AS SortOrder
FROM tbl_Game g
JOIN tbl_UserList_Game ug ON ug.GameID = g.ID
JOIN tbl_UserList ul ON ul.ID = ug.UserListID
LEFT JOIN LATERAL (
SELECT ts.Str AS Value
FROM tbl_Setting ts
WHERE ts.Name = 'DefaultGameCoverImagePath'
LIMIT 1
) DefaultGameCoverImagePath ON TRUE
LEFT JOIN LATERAL (
SELECT GROUP_CONCAT( DISTINCT CONVERT(gl1.UserListID,CHAR) ORDER BY gl1.UserListID SEPARATOR ',') Value
FROM tbl_UserList_Game gl1
JOIN tbl_UserList ul1 ON ul1.ID = gl1.UserListID AND ul1.UserID = ul.UserID
WHERE gl1.GameID = g.ID
) UserListIDs ON TRUE;
-- vw_UserAccount
DROP VIEW IF EXISTS vw_UserAccount;
CREATE DEFINER=`root`@`localhost` VIEW vw_UserAccount AS
SELECT ua.ID,
ua.UserID,
ua.AccountTypeID,
ua.AccountUserID,
ua.AccountUserHash,
AccessToken.Token,
AccessToken.ExpireDate,
RefreshToken.Value AS RefreshToken,
ul.ID AS UserListID,
ul.Name AS UserListName,
ua.ImportLastRunDate,
ua.CreatedDate,
ua.ModifiedDate
FROM tbl_UserAccount ua
JOIN tbl_UserList ul ON ul.UserAccountID = ua.ID
LEFT JOIN LATERAL (
SELECT ut.Token, ut.ExpireDate
FROM tbl_UserAccount_Token ut
WHERE ut.UserAccountID = ua.ID
AND ut.TokenTypeID = 1
LIMIT 1
) AccessToken ON TRUE
LEFT JOIN LATERAL (
SELECT ut.Token AS Value
FROM tbl_UserAccount_Token ut
WHERE ut.UserAccountID = ua.ID
AND ut.TokenTypeID = 2
LIMIT 1
) RefreshToken ON TRUE;
/*********************************************/
-- create/alter procs
/*********************************************/
-- GetUserListGames
DROP PROCEDURE IF EXISTS GetUserListGames;
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE GetUserListGames
(
IN UserID INT,
IN UserListID INT
)
BEGIN
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT ug.ID,
ug.Name,
ug.CoverImagePath,
ug.UserListIDs,
MIN(ug.UserListGameID) AS UserListGameID,
MIN(COALESCE(ug.SortOrder, ug.ID)) AS SortOrder
FROM vw_UserListGame ug
WHERE (UserListID = 0 || ug.UserListID = UserListID)
AND ug.UserID = UserID
AND ug.UserListActive = 1
GROUP BY ug.ID, ug.Name, ug.CoverImagePath, ug.UserListIDs;
END $$
DELIMITER ;
-- SearchGames
DROP PROCEDURE IF EXISTS SearchGames;
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE SearchGames
(
IN SearchText VARCHAR(100)
)
BEGIN
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT ID AS Value, Name AS Label, YEAR(ReleaseDate) AS LabelSecondary, CoverImagePath AS ImagePath
FROM vw_Game
WHERE Name LIKE CONCAT('%', SearchText, '%')
ORDER BY ReleaseDate, Name
LIMIT 20;
END $$
DELIMITER ;
-- ResetDemoDB
DROP PROCEDURE IF EXISTS ResetDemoDB;
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE ResetDemoDB()
BEGIN
IF (DATABASE() = 'gamestatsappdemo') THEN
TRUNCATE TABLE tbl_UserList_Game;
TRUNCATE TABLE tbl_UserList;
TRUNCATE TABLE tbl_UserAccount_Token;
TRUNCATE TABLE tbl_UserAccount;
TRUNCATE TABLE tbl_User_Setting;
TRUNCATE TABLE tbl_User;
TRUNCATE TABLE tbl_Game_IGDBID;
TRUNCATE TABLE tbl_Game;
INSERT INTO tbl_Game (ID, Name, ReleaseDate, GameCategoryID, CoverImageUrl, CoverImagePath, CreatedDate, ModifiedDate)
SELECT ID, Name, ReleaseDate, GameCategoryID, CoverImageUrl, CoverImagePath, CreatedDate, ModifiedDate
FROM GameStatsApp.tbl_Game;
INSERT INTO tbl_Game_IGDBID (GameID, IGDBID)
SELECT GameID, IGDBID
FROM GameStatsApp.tbl_Game_IGDBID;
END IF;
END $$
DELIMITER ;
/*********************************************/
-- populate tables
/*********************************************/
INSERT INTO tbl_Setting (Name, Str, Num, Dte)
SELECT 'TwitchAcccessToken', NULL, NULL, NULL
UNION ALL
SELECT 'TwitchAcccessTokenExpireDate', NULL, NULL, NULL
UNION ALL
SELECT 'GameLastImportDate', NULL, NULL, NULL
UNION ALL
SELECT 'ImportLastRunDate', NULL, NULL, NULL
UNION ALL
SELECT 'DefaultGameCoverImagePath','/dist/images/nocover.jpg',NULL,NULL;
INSERT INTO tbl_DefaultList(ID, Name)
SELECT 1, 'Backlog'
UNION ALL
SELECT 2, 'Playing'
UNION ALL
SELECT 3, 'Completed';
INSERT INTO tbl_AccountType(ID, Name)
SELECT 1, 'Steam'
UNION ALL
SELECT 2, 'Xbox';