diff options
| author | Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> | 2023-09-26 22:02:55 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-09-26 22:02:55 +0300 |
| commit | 3e616f9fdaa37dcda24ccf815894a1c9d6dfa9a8 (patch) | |
| tree | 03d7ffed860887734f2d11be20cc490512f30449 /backend/handlers/user.go | |
| parent | fix: user titles on non profile users (#98) (diff) | |
| download | lphub-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/handlers/user.go')
| -rw-r--r-- | backend/handlers/user.go | 108 |
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())) |