aboutsummaryrefslogtreecommitdiff
path: root/backend/handlers
diff options
context:
space:
mode:
Diffstat (limited to 'backend/handlers')
-rw-r--r--backend/handlers/user.go28
1 files changed, 16 insertions, 12 deletions
diff --git a/backend/handlers/user.go b/backend/handlers/user.go
index d550862..88bbe45 100644
--- a/backend/handlers/user.go
+++ b/backend/handlers/user.go
@@ -300,9 +300,10 @@ func Profile(c *gin.Context) {
300 c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) 300 c.JSON(http.StatusOK, models.ErrorResponse(err.Error()))
301 return 301 return
302 } 302 }
303 sql = `WITH map_records AS (SELECT sp.user_id, sp.map_id, 303 sql = `WITH best_scores AS (SELECT sp.user_id, sp.map_id, MIN(sp.score_count) AS best_score_count, MIN(sp.score_time) AS best_score_time
304 RANK() OVER (PARTITION BY sp.map_id ORDER BY sp.score_count, sp.score_time) AS placement 304 FROM records_sp sp WHERE sp.is_deleted = false GROUP BY sp.user_id, sp.map_id)
305 FROM records_sp sp WHERE sp.is_deleted = false) SELECT DISTINCT ON (map_id) placement FROM map_records WHERE user_id = $1` 305 SELECT (SELECT COUNT(*) + 1 FROM best_scores AS inner_scores WHERE inner_scores.map_id = bs.map_id AND (inner_scores.best_score_count < bs.best_score_count OR (inner_scores.best_score_count = bs.best_score_count AND inner_scores.best_score_time < bs.best_score_time))) AS placement
306 FROM best_scores AS bs WHERE bs.user_id = $1 ORDER BY map_id, placement`
306 placementsRows, err := database.DB.Query(sql, user.(models.User).SteamID) 307 placementsRows, err := database.DB.Query(sql, user.(models.User).SteamID)
307 if err != nil { 308 if err != nil {
308 c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) 309 c.JSON(http.StatusOK, models.ErrorResponse(err.Error()))
@@ -353,9 +354,10 @@ func Profile(c *gin.Context) {
353 c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) 354 c.JSON(http.StatusOK, models.ErrorResponse(err.Error()))
354 return 355 return
355 } 356 }
356 sql = `WITH map_records AS (SELECT mp.host_id, mp.partner_id, mp.map_id, 357 sql = `WITH best_scores AS (SELECT mp.host_id, mp.partner_id, mp.map_id, MIN(mp.score_count) AS best_score_count, MIN(mp.score_time) AS best_score_time
357 RANK() OVER (PARTITION BY mp.map_id ORDER BY mp.score_count, mp.score_time) AS placement 358 FROM records_mp mp WHERE mp.is_deleted = false GROUP BY mp.host_id, mp.partner_id, mp.map_id)
358 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` 359 SELECT (SELECT COUNT(*) + 1 FROM best_scores AS inner_scores WHERE inner_scores.map_id = bs.map_id AND (inner_scores.best_score_count < bs.best_score_count OR (inner_scores.best_score_count = bs.best_score_count AND inner_scores.best_score_time < bs.best_score_time))) AS placement
360 FROM best_scores AS bs WHERE bs.host_id = $1 or bs.partner_id = $1 ORDER BY map_id, placement`
359 placementsRows, err = database.DB.Query(sql, user.(models.User).SteamID) 361 placementsRows, err = database.DB.Query(sql, user.(models.User).SteamID)
360 if err != nil { 362 if err != nil {
361 c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) 363 c.JSON(http.StatusOK, models.ErrorResponse(err.Error()))
@@ -672,9 +674,10 @@ func FetchUser(c *gin.Context) {
672 c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) 674 c.JSON(http.StatusOK, models.ErrorResponse(err.Error()))
673 return 675 return
674 } 676 }
675 sql = `WITH map_records AS (SELECT sp.user_id, sp.map_id, 677 sql = `WITH best_scores AS (SELECT sp.user_id, sp.map_id, MIN(sp.score_count) AS best_score_count, MIN(sp.score_time) AS best_score_time
676 RANK() OVER (PARTITION BY sp.map_id ORDER BY sp.score_count, sp.score_time) AS placement 678 FROM records_sp sp WHERE sp.is_deleted = false GROUP BY sp.user_id, sp.map_id)
677 FROM records_sp sp WHERE sp.is_deleted = false) SELECT DISTINCT ON (map_id) placement FROM map_records WHERE user_id = $1` 679 SELECT (SELECT COUNT(*) + 1 FROM best_scores AS inner_scores WHERE inner_scores.map_id = bs.map_id AND (inner_scores.best_score_count < bs.best_score_count OR (inner_scores.best_score_count = bs.best_score_count AND inner_scores.best_score_time < bs.best_score_time))) AS placement
680 FROM best_scores AS bs WHERE bs.user_id = $1 ORDER BY map_id, placement`
678 placementsRows, err := database.DB.Query(sql, user.SteamID) 681 placementsRows, err := database.DB.Query(sql, user.SteamID)
679 if err != nil { 682 if err != nil {
680 c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) 683 c.JSON(http.StatusOK, models.ErrorResponse(err.Error()))
@@ -725,9 +728,10 @@ func FetchUser(c *gin.Context) {
725 c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) 728 c.JSON(http.StatusOK, models.ErrorResponse(err.Error()))
726 return 729 return
727 } 730 }
728 sql = `WITH map_records AS (SELECT mp.host_id, mp.partner_id, mp.map_id, 731 sql = `WITH best_scores AS (SELECT mp.host_id, mp.partner_id, mp.map_id, MIN(mp.score_count) AS best_score_count, MIN(mp.score_time) AS best_score_time
729 RANK() OVER (PARTITION BY mp.map_id ORDER BY mp.score_count, mp.score_time) AS placement 732 FROM records_mp mp WHERE mp.is_deleted = false GROUP BY mp.host_id, mp.partner_id, mp.map_id)
730 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` 733 SELECT (SELECT COUNT(*) + 1 FROM best_scores AS inner_scores WHERE inner_scores.map_id = bs.map_id AND (inner_scores.best_score_count < bs.best_score_count OR (inner_scores.best_score_count = bs.best_score_count AND inner_scores.best_score_time < bs.best_score_time))) AS placement
734 FROM best_scores AS bs WHERE bs.host_id = $1 or bs.partner_id = $1 ORDER BY map_id, placement`
731 placementsRows, err = database.DB.Query(sql, user.SteamID) 735 placementsRows, err = database.DB.Query(sql, user.SteamID)
732 if err != nil { 736 if err != nil {
733 c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) 737 c.JSON(http.StatusOK, models.ErrorResponse(err.Error()))