aboutsummaryrefslogtreecommitdiff
path: root/backend
diff options
context:
space:
mode:
authorArda Serdar Pektezol <1669855+pektezol@users.noreply.github.com>2023-09-26 22:02:55 +0300
committerGitHub <noreply@github.com>2023-09-26 22:02:55 +0300
commit3e616f9fdaa37dcda24ccf815894a1c9d6dfa9a8 (patch)
tree03d7ffed860887734f2d11be20cc490512f30449 /backend
parentfix: user titles on non profile users (#98) (diff)
downloadlphub-3e616f9fdaa37dcda24ccf815894a1c9d6dfa9a8.tar.gz
lphub-3e616f9fdaa37dcda24ccf815894a1c9d6dfa9a8.tar.bz2
lphub-3e616f9fdaa37dcda24ccf815894a1c9d6dfa9a8.zip
feat: check for deleted records in users (#56)
Former-commit-id: b2e66ec5562f059137c7e1bf310f185441ce2b38
Diffstat (limited to 'backend')
-rw-r--r--backend/handlers/user.go108
1 files changed, 54 insertions, 54 deletions
diff --git a/backend/handlers/user.go b/backend/handlers/user.go
index e05c85b..1b20af0 100644
--- a/backend/handlers/user.go
+++ b/backend/handlers/user.go
@@ -88,7 +88,7 @@ func Profile(c *gin.Context) {
88 Cooperative: ProfileRankingsDetails{}, 88 Cooperative: ProfileRankingsDetails{},
89 } 89 }
90 // Get total map count 90 // Get total map count
91 sql = `SELECT count(id), (SELECT count(id) FROM maps m WHERE m.game_id = 2 AND m.is_disabled = false) FROM maps m WHERE m.game_id = 1 AND m.is_disabled = false;` 91 sql = `SELECT count(id), (SELECT count(id) FROM maps m WHERE m.game_id = 2 AND m.is_disabled = false) FROM maps m WHERE m.game_id = 1 AND m.is_disabled = false`
92 err = database.DB.QueryRow(sql).Scan(&rankings.Singleplayer.CompletionTotal, &rankings.Cooperative.CompletionTotal) 92 err = database.DB.QueryRow(sql).Scan(&rankings.Singleplayer.CompletionTotal, &rankings.Cooperative.CompletionTotal)
93 if err != nil { 93 if err != nil {
94 c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) 94 c.JSON(http.StatusOK, models.ErrorResponse(err.Error()))
@@ -96,19 +96,19 @@ func Profile(c *gin.Context) {
96 } 96 }
97 rankings.Overall.CompletionTotal = rankings.Singleplayer.CompletionTotal + rankings.Cooperative.CompletionTotal 97 rankings.Overall.CompletionTotal = rankings.Singleplayer.CompletionTotal + rankings.Cooperative.CompletionTotal
98 // Get user completion count 98 // Get user completion count
99 sql = `SELECT 'records_sp' AS table_name, COUNT(rs.id) AS total_user_scores 99 sql = `SELECT 'records_sp' AS table_name, COUNT(sp.id)
100 FROM public.records_sp rs JOIN ( 100 FROM records_sp sp JOIN (
101 SELECT mr.map_id, MIN(mr.score_count) AS min_score_count 101 SELECT mr.map_id, MIN(mr.score_count) AS min_score_count
102 FROM public.map_routes mr WHERE mr.category_id = 1 GROUP BY mr.map_id 102 FROM public.map_routes mr WHERE mr.category_id = 1 GROUP BY mr.map_id
103 ) AS subquery_sp ON rs.map_id = subquery_sp.map_id AND rs.score_count = subquery_sp.min_score_count 103 ) AS subquery_sp ON sp.map_id = subquery_sp.map_id AND sp.score_count = subquery_sp.min_score_count
104 WHERE rs.user_id = $1 104 WHERE sp.user_id = $1 AND sp.is_deleted = false
105 UNION ALL 105 UNION ALL
106 SELECT 'records_mp' AS table_name, COUNT(rm.id) AS total_user_scores 106 SELECT 'records_mp' AS table_name, COUNT(mp.id)
107 FROM public.records_mp rm JOIN ( 107 FROM public.records_mp mp JOIN (
108 SELECT mr.map_id, MIN(mr.score_count) AS min_score_count 108 SELECT mr.map_id, MIN(mr.score_count) AS min_score_count
109 FROM public.map_routes mr WHERE mr.category_id = 1 GROUP BY mr.map_id 109 FROM public.map_routes mr WHERE mr.category_id = 1 GROUP BY mr.map_id
110 ) AS subquery_mp ON rm.map_id = subquery_mp.map_id AND rm.score_count = subquery_mp.min_score_count 110 ) AS subquery_mp ON mp.map_id = subquery_mp.map_id AND mp.score_count = subquery_mp.min_score_count
111 WHERE rm.host_id = $1 OR rm.partner_id = $1;` 111 WHERE (mp.host_id = $1 OR mp.partner_id = $1) AND mp.is_deleted = false`
112 rows, err := database.DB.Query(sql, user.(models.User).SteamID) 112 rows, err := database.DB.Query(sql, user.(models.User).SteamID)
113 if err != nil { 113 if err != nil {
114 c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) 114 c.JSON(http.StatusOK, models.ErrorResponse(err.Error()))
@@ -136,10 +136,10 @@ func Profile(c *gin.Context) {
136 sql = `SELECT u.steam_id, COUNT(DISTINCT map_id), 136 sql = `SELECT u.steam_id, COUNT(DISTINCT map_id),
137 (SELECT COUNT(maps.name) FROM maps INNER JOIN games g ON maps.game_id = g.id WHERE g."name" = 'Portal 2 - Singleplayer' AND maps.is_disabled = false), 137 (SELECT COUNT(maps.name) FROM maps INNER JOIN games g ON maps.game_id = g.id WHERE g."name" = 'Portal 2 - Singleplayer' AND maps.is_disabled = false),
138 (SELECT SUM(min_score_count) AS total_min_score_count FROM ( 138 (SELECT SUM(min_score_count) AS total_min_score_count FROM (
139 SELECT user_id, MIN(score_count) AS min_score_count FROM records_sp GROUP BY user_id, map_id) AS subquery WHERE user_id = u.steam_id) 139 SELECT user_id, MIN(score_count) AS min_score_count FROM records_sp WHERE is_deleted = false GROUP BY user_id, map_id) AS subquery WHERE user_id = u.steam_id)
140 FROM records_sp sp JOIN users u ON u.steam_id = sp.user_id GROUP BY u.steam_id, u.user_name 140 FROM records_sp sp JOIN users u ON u.steam_id = sp.user_id WHERE is_deleted = false GROUP BY u.steam_id, u.user_name
141 HAVING COUNT(DISTINCT map_id) = (SELECT COUNT(maps.name) FROM maps INNER JOIN games g ON maps.game_id = g.id WHERE g.is_coop = FALSE AND is_disabled = false) 141 HAVING COUNT(DISTINCT map_id) = (SELECT COUNT(maps.name) FROM maps INNER JOIN games g ON maps.game_id = g.id WHERE g.is_coop = FALSE AND is_disabled = false)
142 ORDER BY total_min_score_count ASC;` 142 ORDER BY total_min_score_count ASC`
143 rows, err = database.DB.Query(sql) 143 rows, err = database.DB.Query(sql)
144 if err != nil { 144 if err != nil {
145 c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) 145 c.JSON(http.StatusOK, models.ErrorResponse(err.Error()))
@@ -170,10 +170,10 @@ func Profile(c *gin.Context) {
170 sql = `SELECT u.steam_id, COUNT(DISTINCT map_id), 170 sql = `SELECT u.steam_id, COUNT(DISTINCT map_id),
171 (SELECT COUNT(maps.name) FROM maps INNER JOIN games g ON maps.game_id = g.id WHERE g."name" = 'Portal 2 - Cooperative' AND is_disabled = false), 171 (SELECT COUNT(maps.name) FROM maps INNER JOIN games g ON maps.game_id = g.id WHERE g."name" = 'Portal 2 - Cooperative' AND is_disabled = false),
172 (SELECT SUM(min_score_count) AS total_min_score_count FROM ( 172 (SELECT SUM(min_score_count) AS total_min_score_count FROM (
173 SELECT host_id, partner_id, MIN(score_count) AS min_score_count FROM records_mp GROUP BY host_id, partner_id, map_id) AS subquery WHERE host_id = u.steam_id OR partner_id = u.steam_id) 173 SELECT host_id, partner_id, MIN(score_count) AS min_score_count FROM records_mp WHERE is_deleted = false GROUP BY host_id, partner_id, map_id) AS subquery WHERE host_id = u.steam_id OR partner_id = u.steam_id)
174 FROM records_mp mp JOIN users u ON u.steam_id = mp.host_id OR u.steam_id = mp.partner_id GROUP BY u.steam_id, u.user_name 174 FROM records_mp mp JOIN users u ON u.steam_id = mp.host_id OR u.steam_id = mp.partner_id WHERE mp.is_deleted = false GROUP BY u.steam_id, u.user_name
175 HAVING COUNT(DISTINCT map_id) = (SELECT COUNT(maps.name) FROM maps INNER JOIN games g ON maps.game_id = g.id WHERE g.is_coop = true AND is_disabled = false) 175 HAVING COUNT(DISTINCT map_id) = (SELECT COUNT(maps.name) FROM maps INNER JOIN games g ON maps.game_id = g.id WHERE g.is_coop = true AND is_disabled = false)
176 ORDER BY total_min_score_count ASC;` 176 ORDER BY total_min_score_count ASC`
177 rows, err = database.DB.Query(sql) 177 rows, err = database.DB.Query(sql)
178 if err != nil { 178 if err != nil {
179 c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) 179 c.JSON(http.StatusOK, models.ErrorResponse(err.Error()))
@@ -208,7 +208,7 @@ func Profile(c *gin.Context) {
208 FROM users u 208 FROM users u
209 LEFT JOIN ( 209 LEFT JOIN (
210 SELECT user_id, map_id, MIN(score_count) AS min_score_count 210 SELECT user_id, map_id, MIN(score_count) AS min_score_count
211 FROM records_sp 211 FROM records_sp WHERE is_deleted = false
212 GROUP BY user_id, map_id 212 GROUP BY user_id, map_id
213 ) AS subquery ON subquery.user_id = u.steam_id 213 ) AS subquery ON subquery.user_id = u.steam_id
214 WHERE u.steam_id IN ( 214 WHERE u.steam_id IN (
@@ -216,7 +216,7 @@ func Profile(c *gin.Context) {
216 FROM records_sp sp 216 FROM records_sp sp
217 JOIN maps m ON sp.map_id = m.id 217 JOIN maps m ON sp.map_id = m.id
218 JOIN games g ON m.game_id = g.id 218 JOIN games g ON m.game_id = g.id
219 WHERE g.is_coop = FALSE AND m.is_disabled = FALSE 219 WHERE g.is_coop = FALSE AND m.is_disabled = FALSE AND sp.is_deleted = false
220 GROUP BY user_id 220 GROUP BY user_id
221 HAVING COUNT(DISTINCT sp.map_id) = ( 221 HAVING COUNT(DISTINCT sp.map_id) = (
222 SELECT COUNT(maps.name) 222 SELECT COUNT(maps.name)
@@ -232,7 +232,7 @@ func Profile(c *gin.Context) {
232 FROM users u 232 FROM users u
233 LEFT JOIN ( 233 LEFT JOIN (
234 SELECT host_id, partner_id, map_id, MIN(score_count) AS min_score_count 234 SELECT host_id, partner_id, map_id, MIN(score_count) AS min_score_count
235 FROM records_mp 235 FROM records_mp WHERE is_deleted = false
236 GROUP BY host_id, partner_id, map_id 236 GROUP BY host_id, partner_id, map_id
237 ) AS subquery ON subquery.host_id = u.steam_id OR subquery.partner_id = u.steam_id 237 ) AS subquery ON subquery.host_id = u.steam_id OR subquery.partner_id = u.steam_id
238 WHERE u.steam_id IN ( 238 WHERE u.steam_id IN (
@@ -240,7 +240,7 @@ func Profile(c *gin.Context) {
240 FROM records_mp mp 240 FROM records_mp mp
241 JOIN maps m ON mp.map_id = m.id 241 JOIN maps m ON mp.map_id = m.id
242 JOIN games g ON m.game_id = g.id 242 JOIN games g ON m.game_id = g.id
243 WHERE g.is_coop = TRUE AND m.is_disabled = FALSE 243 WHERE g.is_coop = TRUE AND m.is_disabled = FALSE AND mp.is_deleted = false
244 GROUP BY host_id 244 GROUP BY host_id
245 HAVING COUNT(DISTINCT mp.map_id) = ( 245 HAVING COUNT(DISTINCT mp.map_id) = (
246 SELECT COUNT(maps.name) 246 SELECT COUNT(maps.name)
@@ -253,7 +253,7 @@ func Profile(c *gin.Context) {
253 FROM records_mp mp 253 FROM records_mp mp
254 JOIN maps m ON mp.map_id = m.id 254 JOIN maps m ON mp.map_id = m.id
255 JOIN games g ON m.game_id = g.id 255 JOIN games g ON m.game_id = g.id
256 WHERE g.is_coop = TRUE AND m.is_disabled = FALSE 256 WHERE g.is_coop = TRUE AND m.is_disabled = FALSE AND mp.is_deleted = false
257 GROUP BY partner_id 257 GROUP BY partner_id
258 HAVING COUNT(DISTINCT mp.map_id) = ( 258 HAVING COUNT(DISTINCT mp.map_id) = (
259 SELECT COUNT(maps.name) 259 SELECT COUNT(maps.name)
@@ -265,10 +265,10 @@ func Profile(c *gin.Context) {
265 GROUP BY u.steam_id 265 GROUP BY u.steam_id
266 ) 266 )
267 SELECT COALESCE(sp.steam_id, mp.steam_id) AS steam_id, 267 SELECT COALESCE(sp.steam_id, mp.steam_id) AS steam_id,
268 COALESCE(sp.total_min_score_count, 0) + COALESCE(mp.total_min_score_count, 0) AS overall_total_min_score_count 268 sp.total_min_score_count + mp.total_min_score_count AS overall_total_min_score_count
269 FROM user_sp sp 269 FROM user_sp sp
270 INNER JOIN user_mp mp ON sp.steam_id = mp.steam_id 270 INNER JOIN user_mp mp ON sp.steam_id = mp.steam_id
271 ORDER BY overall_total_min_score_count ASC;` 271 ORDER BY overall_total_min_score_count ASC`
272 rows, err = database.DB.Query(sql) 272 rows, err = database.DB.Query(sql)
273 if err != nil { 273 if err != nil {
274 c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) 274 c.JSON(http.StatusOK, models.ErrorResponse(err.Error()))
@@ -293,7 +293,7 @@ func Profile(c *gin.Context) {
293 records := []ProfileRecords{} 293 records := []ProfileRecords{}
294 // Get singleplayer records 294 // Get singleplayer records
295 sql = `SELECT sp.id, m.game_id, m.chapter_id, sp.map_id, m."name", (SELECT mr.score_count FROM map_routes mr WHERE mr.map_id = sp.map_id ORDER BY mr.score_count ASC LIMIT 1) AS wr_count, sp.score_count, sp.score_time, sp.demo_id, sp.record_date 295 sql = `SELECT sp.id, m.game_id, m.chapter_id, sp.map_id, m."name", (SELECT mr.score_count FROM map_routes mr WHERE mr.map_id = sp.map_id ORDER BY mr.score_count ASC LIMIT 1) AS wr_count, sp.score_count, sp.score_time, sp.demo_id, sp.record_date
296 FROM records_sp sp INNER JOIN maps m ON sp.map_id = m.id WHERE sp.user_id = $1 ORDER BY sp.map_id, sp.score_count, sp.score_time` 296 FROM records_sp sp INNER JOIN maps m ON sp.map_id = m.id WHERE sp.user_id = $1 AND sp.is_deleted = false ORDER BY sp.map_id, sp.score_count, sp.score_time`
297 rows, err = database.DB.Query(sql, user.(models.User).SteamID) 297 rows, err = database.DB.Query(sql, user.(models.User).SteamID)
298 if err != nil { 298 if err != nil {
299 c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) 299 c.JSON(http.StatusOK, models.ErrorResponse(err.Error()))
@@ -301,7 +301,7 @@ func Profile(c *gin.Context) {
301 } 301 }
302 sql = `WITH map_records AS (SELECT sp.user_id, sp.map_id, 302 sql = `WITH map_records AS (SELECT sp.user_id, sp.map_id,
303 RANK() OVER (PARTITION BY sp.map_id ORDER BY sp.score_count, sp.score_time) AS placement 303 RANK() OVER (PARTITION BY sp.map_id ORDER BY sp.score_count, sp.score_time) AS placement
304 FROM records_sp sp) SELECT DISTINCT ON (map_id) placement FROM map_records WHERE user_id = $1` 304 FROM records_sp sp WHERE sp.is_deleted = false) SELECT DISTINCT ON (map_id) placement FROM map_records WHERE user_id = $1`
305 placementsRows, err := database.DB.Query(sql, user.(models.User).SteamID) 305 placementsRows, err := database.DB.Query(sql, user.(models.User).SteamID)
306 if err != nil { 306 if err != nil {
307 c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) 307 c.JSON(http.StatusOK, models.ErrorResponse(err.Error()))
@@ -346,7 +346,7 @@ func Profile(c *gin.Context) {
346 } 346 }
347 // Get multiplayer records 347 // Get multiplayer records
348 sql = `SELECT mp.id, m.game_id, m.chapter_id, mp.map_id, m."name", (SELECT mr.score_count FROM map_routes mr WHERE mr.map_id = mp.map_id ORDER BY mr.score_count ASC LIMIT 1) AS wr_count, mp.score_count, mp.score_time, CASE WHEN host_id = $1 THEN mp.host_demo_id WHEN partner_id = $1 THEN mp.partner_demo_id END demo_id, mp.record_date 348 sql = `SELECT mp.id, m.game_id, m.chapter_id, mp.map_id, m."name", (SELECT mr.score_count FROM map_routes mr WHERE mr.map_id = mp.map_id ORDER BY mr.score_count ASC LIMIT 1) AS wr_count, mp.score_count, mp.score_time, CASE WHEN host_id = $1 THEN mp.host_demo_id WHEN partner_id = $1 THEN mp.partner_demo_id END demo_id, mp.record_date
349 FROM records_mp mp INNER JOIN maps m ON mp.map_id = m.id WHERE mp.host_id = $1 OR mp.partner_id = $1 ORDER BY mp.map_id, mp.score_count, mp.score_time` 349 FROM records_mp mp INNER JOIN maps m ON mp.map_id = m.id WHERE (mp.host_id = $1 OR mp.partner_id = $1) AND mp.is_deleted = false ORDER BY mp.map_id, mp.score_count, mp.score_time`
350 rows, err = database.DB.Query(sql, user.(models.User).SteamID) 350 rows, err = database.DB.Query(sql, user.(models.User).SteamID)
351 if err != nil { 351 if err != nil {
352 c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) 352 c.JSON(http.StatusOK, models.ErrorResponse(err.Error()))
@@ -354,7 +354,7 @@ func Profile(c *gin.Context) {
354 } 354 }
355 sql = `WITH map_records AS (SELECT mp.host_id, mp.partner_id, mp.map_id, 355 sql = `WITH map_records AS (SELECT mp.host_id, mp.partner_id, mp.map_id,
356 RANK() OVER (PARTITION BY mp.map_id ORDER BY mp.score_count, mp.score_time) AS placement 356 RANK() OVER (PARTITION BY mp.map_id ORDER BY mp.score_count, mp.score_time) AS placement
357 FROM records_mp mp) SELECT DISTINCT ON (map_id) placement FROM map_records WHERE host_id = $1 OR partner_id = $1` 357 FROM records_mp mp WHERE mp.is_deleted = false) SELECT DISTINCT ON (map_id) placement FROM map_records WHERE host_id = $1 OR partner_id = $1`
358 placementsRows, err = database.DB.Query(sql, user.(models.User).SteamID) 358 placementsRows, err = database.DB.Query(sql, user.(models.User).SteamID)
359 if err != nil { 359 if err != nil {
360 c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) 360 c.JSON(http.StatusOK, models.ErrorResponse(err.Error()))
@@ -460,7 +460,7 @@ func FetchUser(c *gin.Context) {
460 Cooperative: ProfileRankingsDetails{}, 460 Cooperative: ProfileRankingsDetails{},
461 } 461 }
462 // Get total map count 462 // Get total map count
463 sql = `SELECT count(id), (SELECT count(id) FROM maps m WHERE m.game_id = 2 AND m.is_disabled = false) FROM maps m WHERE m.game_id = 1 AND m.is_disabled = false;` 463 sql = `SELECT count(id), (SELECT count(id) FROM maps m WHERE m.game_id = 2 AND m.is_disabled = false) FROM maps m WHERE m.game_id = 1 AND m.is_disabled = false`
464 err = database.DB.QueryRow(sql).Scan(&rankings.Singleplayer.CompletionTotal, &rankings.Cooperative.CompletionTotal) 464 err = database.DB.QueryRow(sql).Scan(&rankings.Singleplayer.CompletionTotal, &rankings.Cooperative.CompletionTotal)
465 if err != nil { 465 if err != nil {
466 c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) 466 c.JSON(http.StatusOK, models.ErrorResponse(err.Error()))
@@ -468,19 +468,19 @@ func FetchUser(c *gin.Context) {
468 } 468 }
469 rankings.Overall.CompletionTotal = rankings.Singleplayer.CompletionTotal + rankings.Cooperative.CompletionTotal 469 rankings.Overall.CompletionTotal = rankings.Singleplayer.CompletionTotal + rankings.Cooperative.CompletionTotal
470 // Get user completion count 470 // Get user completion count
471 sql = `SELECT 'records_sp' AS table_name, COUNT(rs.id) AS total_user_scores 471 sql = `SELECT 'records_sp' AS table_name, COUNT(sp.id)
472 FROM public.records_sp rs JOIN ( 472 FROM records_sp sp JOIN (
473 SELECT mr.map_id, MIN(mr.score_count) AS min_score_count 473 SELECT mr.map_id, MIN(mr.score_count) AS min_score_count
474 FROM public.map_routes mr WHERE mr.category_id = 1 GROUP BY mr.map_id 474 FROM public.map_routes mr WHERE mr.category_id = 1 GROUP BY mr.map_id
475 ) AS subquery_sp ON rs.map_id = subquery_sp.map_id AND rs.score_count = subquery_sp.min_score_count 475 ) AS subquery_sp ON sp.map_id = subquery_sp.map_id AND sp.score_count = subquery_sp.min_score_count
476 WHERE rs.user_id = $1 476 WHERE sp.user_id = $1 AND sp.is_deleted = false
477 UNION ALL 477 UNION ALL
478 SELECT 'records_mp' AS table_name, COUNT(rm.id) AS total_user_scores 478 SELECT 'records_mp' AS table_name, COUNT(mp.id)
479 FROM public.records_mp rm JOIN ( 479 FROM public.records_mp mp JOIN (
480 SELECT mr.map_id, MIN(mr.score_count) AS min_score_count 480 SELECT mr.map_id, MIN(mr.score_count) AS min_score_count
481 FROM public.map_routes mr WHERE mr.category_id = 1 GROUP BY mr.map_id 481 FROM public.map_routes mr WHERE mr.category_id = 1 GROUP BY mr.map_id
482 ) AS subquery_mp ON rm.map_id = subquery_mp.map_id AND rm.score_count = subquery_mp.min_score_count 482 ) AS subquery_mp ON mp.map_id = subquery_mp.map_id AND mp.score_count = subquery_mp.min_score_count
483 WHERE rm.host_id = $1 OR rm.partner_id = $1;` 483 WHERE (mp.host_id = $1 OR mp.partner_id = $1) AND mp.is_deleted = false`
484 rows, err = database.DB.Query(sql, user.SteamID) 484 rows, err = database.DB.Query(sql, user.SteamID)
485 if err != nil { 485 if err != nil {
486 c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) 486 c.JSON(http.StatusOK, models.ErrorResponse(err.Error()))
@@ -508,10 +508,10 @@ func FetchUser(c *gin.Context) {
508 sql = `SELECT u.steam_id, COUNT(DISTINCT map_id), 508 sql = `SELECT u.steam_id, COUNT(DISTINCT map_id),
509 (SELECT COUNT(maps.name) FROM maps INNER JOIN games g ON maps.game_id = g.id WHERE g."name" = 'Portal 2 - Singleplayer' AND maps.is_disabled = false), 509 (SELECT COUNT(maps.name) FROM maps INNER JOIN games g ON maps.game_id = g.id WHERE g."name" = 'Portal 2 - Singleplayer' AND maps.is_disabled = false),
510 (SELECT SUM(min_score_count) AS total_min_score_count FROM ( 510 (SELECT SUM(min_score_count) AS total_min_score_count FROM (
511 SELECT user_id, MIN(score_count) AS min_score_count FROM records_sp GROUP BY user_id, map_id) AS subquery WHERE user_id = u.steam_id) 511 SELECT user_id, MIN(score_count) AS min_score_count FROM records_sp WHERE is_deleted = false GROUP BY user_id, map_id) AS subquery WHERE user_id = u.steam_id)
512 FROM records_sp sp JOIN users u ON u.steam_id = sp.user_id GROUP BY u.steam_id, u.user_name 512 FROM records_sp sp JOIN users u ON u.steam_id = sp.user_id WHERE is_deleted = false GROUP BY u.steam_id, u.user_name
513 HAVING COUNT(DISTINCT map_id) = (SELECT COUNT(maps.name) FROM maps INNER JOIN games g ON maps.game_id = g.id WHERE g.is_coop = FALSE AND is_disabled = false) 513 HAVING COUNT(DISTINCT map_id) = (SELECT COUNT(maps.name) FROM maps INNER JOIN games g ON maps.game_id = g.id WHERE g.is_coop = FALSE AND is_disabled = false)
514 ORDER BY total_min_score_count ASC;` 514 ORDER BY total_min_score_count ASC`
515 rows, err = database.DB.Query(sql) 515 rows, err = database.DB.Query(sql)
516 if err != nil { 516 if err != nil {
517 c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) 517 c.JSON(http.StatusOK, models.ErrorResponse(err.Error()))
@@ -542,10 +542,10 @@ func FetchUser(c *gin.Context) {
542 sql = `SELECT u.steam_id, COUNT(DISTINCT map_id), 542 sql = `SELECT u.steam_id, COUNT(DISTINCT map_id),
543 (SELECT COUNT(maps.name) FROM maps INNER JOIN games g ON maps.game_id = g.id WHERE g."name" = 'Portal 2 - Cooperative' AND is_disabled = false), 543 (SELECT COUNT(maps.name) FROM maps INNER JOIN games g ON maps.game_id = g.id WHERE g."name" = 'Portal 2 - Cooperative' AND is_disabled = false),
544 (SELECT SUM(min_score_count) AS total_min_score_count FROM ( 544 (SELECT SUM(min_score_count) AS total_min_score_count FROM (
545 SELECT host_id, partner_id, MIN(score_count) AS min_score_count FROM records_mp GROUP BY host_id, partner_id, map_id) AS subquery WHERE host_id = u.steam_id OR partner_id = u.steam_id) 545 SELECT host_id, partner_id, MIN(score_count) AS min_score_count FROM records_mp WHERE is_deleted = false GROUP BY host_id, partner_id, map_id) AS subquery WHERE host_id = u.steam_id OR partner_id = u.steam_id)
546 FROM records_mp mp JOIN users u ON u.steam_id = mp.host_id OR u.steam_id = mp.partner_id GROUP BY u.steam_id, u.user_name 546 FROM records_mp mp JOIN users u ON u.steam_id = mp.host_id OR u.steam_id = mp.partner_id WHERE mp.is_deleted = false GROUP BY u.steam_id, u.user_name
547 HAVING COUNT(DISTINCT map_id) = (SELECT COUNT(maps.name) FROM maps INNER JOIN games g ON maps.game_id = g.id WHERE g.is_coop = true AND is_disabled = false) 547 HAVING COUNT(DISTINCT map_id) = (SELECT COUNT(maps.name) FROM maps INNER JOIN games g ON maps.game_id = g.id WHERE g.is_coop = true AND is_disabled = false)
548 ORDER BY total_min_score_count ASC;` 548 ORDER BY total_min_score_count ASC`
549 rows, err = database.DB.Query(sql) 549 rows, err = database.DB.Query(sql)
550 if err != nil { 550 if err != nil {
551 c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) 551 c.JSON(http.StatusOK, models.ErrorResponse(err.Error()))
@@ -580,7 +580,7 @@ func FetchUser(c *gin.Context) {
580 FROM users u 580 FROM users u
581 LEFT JOIN ( 581 LEFT JOIN (
582 SELECT user_id, map_id, MIN(score_count) AS min_score_count 582 SELECT user_id, map_id, MIN(score_count) AS min_score_count
583 FROM records_sp 583 FROM records_sp WHERE is_deleted = false
584 GROUP BY user_id, map_id 584 GROUP BY user_id, map_id
585 ) AS subquery ON subquery.user_id = u.steam_id 585 ) AS subquery ON subquery.user_id = u.steam_id
586 WHERE u.steam_id IN ( 586 WHERE u.steam_id IN (
@@ -588,7 +588,7 @@ func FetchUser(c *gin.Context) {
588 FROM records_sp sp 588 FROM records_sp sp
589 JOIN maps m ON sp.map_id = m.id 589 JOIN maps m ON sp.map_id = m.id
590 JOIN games g ON m.game_id = g.id 590 JOIN games g ON m.game_id = g.id
591 WHERE g.is_coop = FALSE AND m.is_disabled = FALSE 591 WHERE g.is_coop = FALSE AND m.is_disabled = FALSE AND sp.is_deleted = false
592 GROUP BY user_id 592 GROUP BY user_id
593 HAVING COUNT(DISTINCT sp.map_id) = ( 593 HAVING COUNT(DISTINCT sp.map_id) = (
594 SELECT COUNT(maps.name) 594 SELECT COUNT(maps.name)
@@ -604,7 +604,7 @@ func FetchUser(c *gin.Context) {
604 FROM users u 604 FROM users u
605 LEFT JOIN ( 605 LEFT JOIN (
606 SELECT host_id, partner_id, map_id, MIN(score_count) AS min_score_count 606 SELECT host_id, partner_id, map_id, MIN(score_count) AS min_score_count
607 FROM records_mp 607 FROM records_mp WHERE is_deleted = false
608 GROUP BY host_id, partner_id, map_id 608 GROUP BY host_id, partner_id, map_id
609 ) AS subquery ON subquery.host_id = u.steam_id OR subquery.partner_id = u.steam_id 609 ) AS subquery ON subquery.host_id = u.steam_id OR subquery.partner_id = u.steam_id
610 WHERE u.steam_id IN ( 610 WHERE u.steam_id IN (
@@ -612,7 +612,7 @@ func FetchUser(c *gin.Context) {
612 FROM records_mp mp 612 FROM records_mp mp
613 JOIN maps m ON mp.map_id = m.id 613 JOIN maps m ON mp.map_id = m.id
614 JOIN games g ON m.game_id = g.id 614 JOIN games g ON m.game_id = g.id
615 WHERE g.is_coop = TRUE AND m.is_disabled = FALSE 615 WHERE g.is_coop = TRUE AND m.is_disabled = FALSE AND mp.is_deleted = false
616 GROUP BY host_id 616 GROUP BY host_id
617 HAVING COUNT(DISTINCT mp.map_id) = ( 617 HAVING COUNT(DISTINCT mp.map_id) = (
618 SELECT COUNT(maps.name) 618 SELECT COUNT(maps.name)
@@ -625,7 +625,7 @@ func FetchUser(c *gin.Context) {
625 FROM records_mp mp 625 FROM records_mp mp
626 JOIN maps m ON mp.map_id = m.id 626 JOIN maps m ON mp.map_id = m.id
627 JOIN games g ON m.game_id = g.id 627 JOIN games g ON m.game_id = g.id
628 WHERE g.is_coop = TRUE AND m.is_disabled = FALSE 628 WHERE g.is_coop = TRUE AND m.is_disabled = FALSE AND mp.is_deleted = false
629 GROUP BY partner_id 629 GROUP BY partner_id
630 HAVING COUNT(DISTINCT mp.map_id) = ( 630 HAVING COUNT(DISTINCT mp.map_id) = (
631 SELECT COUNT(maps.name) 631 SELECT COUNT(maps.name)
@@ -637,10 +637,10 @@ func FetchUser(c *gin.Context) {
637 GROUP BY u.steam_id 637 GROUP BY u.steam_id
638 ) 638 )
639 SELECT COALESCE(sp.steam_id, mp.steam_id) AS steam_id, 639 SELECT COALESCE(sp.steam_id, mp.steam_id) AS steam_id,
640 COALESCE(sp.total_min_score_count, 0) + COALESCE(mp.total_min_score_count, 0) AS overall_total_min_score_count 640 sp.total_min_score_count + mp.total_min_score_count AS overall_total_min_score_count
641 FROM user_sp sp 641 FROM user_sp sp
642 INNER JOIN user_mp mp ON sp.steam_id = mp.steam_id 642 INNER JOIN user_mp mp ON sp.steam_id = mp.steam_id
643 ORDER BY overall_total_min_score_count ASC;` 643 ORDER BY overall_total_min_score_count ASC`
644 rows, err = database.DB.Query(sql) 644 rows, err = database.DB.Query(sql)
645 if err != nil { 645 if err != nil {
646 c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) 646 c.JSON(http.StatusOK, models.ErrorResponse(err.Error()))
@@ -665,7 +665,7 @@ func FetchUser(c *gin.Context) {
665 records := []ProfileRecords{} 665 records := []ProfileRecords{}
666 // Get singleplayer records 666 // Get singleplayer records
667 sql = `SELECT sp.id, m.game_id, m.chapter_id, sp.map_id, m."name", (SELECT mr.score_count FROM map_routes mr WHERE mr.map_id = sp.map_id ORDER BY mr.score_count ASC LIMIT 1) AS wr_count, sp.score_count, sp.score_time, sp.demo_id, sp.record_date 667 sql = `SELECT sp.id, m.game_id, m.chapter_id, sp.map_id, m."name", (SELECT mr.score_count FROM map_routes mr WHERE mr.map_id = sp.map_id ORDER BY mr.score_count ASC LIMIT 1) AS wr_count, sp.score_count, sp.score_time, sp.demo_id, sp.record_date
668 FROM records_sp sp INNER JOIN maps m ON sp.map_id = m.id WHERE sp.user_id = $1 ORDER BY sp.map_id, sp.score_count, sp.score_time` 668 FROM records_sp sp INNER JOIN maps m ON sp.map_id = m.id WHERE sp.user_id = $1 AND sp.is_deleted = false ORDER BY sp.map_id, sp.score_count, sp.score_time`
669 rows, err = database.DB.Query(sql, user.SteamID) 669 rows, err = database.DB.Query(sql, user.SteamID)
670 if err != nil { 670 if err != nil {
671 c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) 671 c.JSON(http.StatusOK, models.ErrorResponse(err.Error()))
@@ -673,7 +673,7 @@ func FetchUser(c *gin.Context) {
673 } 673 }
674 sql = `WITH map_records AS (SELECT sp.user_id, sp.map_id, 674 sql = `WITH map_records AS (SELECT sp.user_id, sp.map_id,
675 RANK() OVER (PARTITION BY sp.map_id ORDER BY sp.score_count, sp.score_time) AS placement 675 RANK() OVER (PARTITION BY sp.map_id ORDER BY sp.score_count, sp.score_time) AS placement
676 FROM records_sp sp) SELECT DISTINCT ON (map_id) placement FROM map_records WHERE user_id = $1` 676 FROM records_sp sp WHERE sp.is_deleted = false) SELECT DISTINCT ON (map_id) placement FROM map_records WHERE user_id = $1`
677 placementsRows, err := database.DB.Query(sql, user.SteamID) 677 placementsRows, err := database.DB.Query(sql, user.SteamID)
678 if err != nil { 678 if err != nil {
679 c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) 679 c.JSON(http.StatusOK, models.ErrorResponse(err.Error()))
@@ -718,7 +718,7 @@ func FetchUser(c *gin.Context) {
718 } 718 }
719 // Get multiplayer records 719 // Get multiplayer records
720 sql = `SELECT mp.id, m.game_id, m.chapter_id, mp.map_id, m."name", (SELECT mr.score_count FROM map_routes mr WHERE mr.map_id = mp.map_id ORDER BY mr.score_count ASC LIMIT 1) AS wr_count, mp.score_count, mp.score_time, CASE WHEN host_id = $1 THEN mp.host_demo_id WHEN partner_id = $1 THEN mp.partner_demo_id END demo_id, mp.record_date 720 sql = `SELECT mp.id, m.game_id, m.chapter_id, mp.map_id, m."name", (SELECT mr.score_count FROM map_routes mr WHERE mr.map_id = mp.map_id ORDER BY mr.score_count ASC LIMIT 1) AS wr_count, mp.score_count, mp.score_time, CASE WHEN host_id = $1 THEN mp.host_demo_id WHEN partner_id = $1 THEN mp.partner_demo_id END demo_id, mp.record_date
721 FROM records_mp mp INNER JOIN maps m ON mp.map_id = m.id WHERE mp.host_id = $1 OR mp.partner_id = $1 ORDER BY mp.map_id, mp.score_count, mp.score_time` 721 FROM records_mp mp INNER JOIN maps m ON mp.map_id = m.id WHERE (mp.host_id = $1 OR mp.partner_id = $1) AND mp.is_deleted = false ORDER BY mp.map_id, mp.score_count, mp.score_time`
722 rows, err = database.DB.Query(sql, user.SteamID) 722 rows, err = database.DB.Query(sql, user.SteamID)
723 if err != nil { 723 if err != nil {
724 c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) 724 c.JSON(http.StatusOK, models.ErrorResponse(err.Error()))
@@ -726,7 +726,7 @@ func FetchUser(c *gin.Context) {
726 } 726 }
727 sql = `WITH map_records AS (SELECT mp.host_id, mp.partner_id, mp.map_id, 727 sql = `WITH map_records AS (SELECT mp.host_id, mp.partner_id, mp.map_id,
728 RANK() OVER (PARTITION BY mp.map_id ORDER BY mp.score_count, mp.score_time) AS placement 728 RANK() OVER (PARTITION BY mp.map_id ORDER BY mp.score_count, mp.score_time) AS placement
729 FROM records_mp mp) SELECT DISTINCT ON (map_id) placement FROM map_records WHERE host_id = $1 OR partner_id = $1` 729 FROM records_mp mp WHERE mp.is_deleted = false) SELECT DISTINCT ON (map_id) placement FROM map_records WHERE host_id = $1 OR partner_id = $1`
730 placementsRows, err = database.DB.Query(sql, user.SteamID) 730 placementsRows, err = database.DB.Query(sql, user.SteamID)
731 if err != nil { 731 if err != nil {
732 c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) 732 c.JSON(http.StatusOK, models.ErrorResponse(err.Error()))