diff options
| author | Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> | 2024-01-28 23:54:10 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-01-28 23:54:10 +0300 |
| commit | aefa041940daeb6172995ef45507429d11125e90 (patch) | |
| tree | 60bbd95141a610a6e8de644f8bb863f765092588 | |
| parent | feat: check steam ids when uploading demo (#148) (diff) | |
| download | lphub-aefa041940daeb6172995ef45507429d11125e90.tar.gz lphub-aefa041940daeb6172995ef45507429d11125e90.tar.bz2 lphub-aefa041940daeb6172995ef45507429d11125e90.zip | |
fix: hopefully fix profile placement calculation (#123)
| -rw-r--r-- | backend/handlers/user.go | 28 |
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())) |