diff options
| author | Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> | 2023-01-16 21:22:55 +0300 |
|---|---|---|
| committer | Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> | 2023-01-16 21:22:55 +0300 |
| commit | 8d12458d90ef1fd57421f5b3abd4fc6d06b9834c (patch) | |
| tree | 4714d2feeac1bb539570e23e04bad632ccda5952 | |
| parent | fixed logic behind record history for each map (#26) (diff) | |
| download | lphub-8d12458d90ef1fd57421f5b3abd4fc6d06b9834c.tar.gz lphub-8d12458d90ef1fd57421f5b3abd4fc6d06b9834c.tar.bz2 lphub-8d12458d90ef1fd57421f5b3abd4fc6d06b9834c.zip | |
ranking placements in each map with correct tie handling (#5, #27)
| -rw-r--r-- | backend/controllers/mapController.go | 22 | ||||
| -rw-r--r-- | backend/models/models.go | 2 |
2 files changed, 22 insertions, 2 deletions
diff --git a/backend/controllers/mapController.go b/backend/controllers/mapController.go index c26d1ad..53fb18c 100644 --- a/backend/controllers/mapController.go +++ b/backend/controllers/mapController.go | |||
| @@ -34,12 +34,14 @@ func FetchMap(c *gin.Context) { | |||
| 34 | if mapData.IsCoop { | 34 | if mapData.IsCoop { |
| 35 | var records []models.RecordMP | 35 | var records []models.RecordMP |
| 36 | sql = `SELECT id, host_id, partner_id, score_count, score_time, host_demo_id, partner_demo_id, record_date | 36 | sql = `SELECT id, host_id, partner_id, score_count, score_time, host_demo_id, partner_demo_id, record_date |
| 37 | FROM records_mp WHERE map_id = $1;` | 37 | FROM records_mp WHERE map_id = $1 ORDER BY score_count, score_time;` |
| 38 | rows, err := database.DB.Query(sql, id) | 38 | rows, err := database.DB.Query(sql, id) |
| 39 | if err != nil { | 39 | if err != nil { |
| 40 | c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) | 40 | c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) |
| 41 | return | 41 | return |
| 42 | } | 42 | } |
| 43 | placement := 1 | ||
| 44 | ties := 0 | ||
| 43 | for rows.Next() { | 45 | for rows.Next() { |
| 44 | var record models.RecordMP | 46 | var record models.RecordMP |
| 45 | err := rows.Scan(&record.RecordID, &record.HostID, &record.PartnerID, &record.ScoreCount, &record.ScoreTime, &record.HostDemoID, &record.PartnerDemoID, &record.RecordDate) | 47 | err := rows.Scan(&record.RecordID, &record.HostID, &record.PartnerID, &record.ScoreCount, &record.ScoreTime, &record.HostDemoID, &record.PartnerDemoID, &record.RecordDate) |
| @@ -47,18 +49,27 @@ func FetchMap(c *gin.Context) { | |||
| 47 | c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) | 49 | c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) |
| 48 | return | 50 | return |
| 49 | } | 51 | } |
| 52 | if len(records) != 0 && records[len(records)-1].ScoreTime == record.ScoreTime { | ||
| 53 | ties++ | ||
| 54 | record.Placement = placement - ties | ||
| 55 | } else { | ||
| 56 | record.Placement = placement | ||
| 57 | } | ||
| 50 | records = append(records, record) | 58 | records = append(records, record) |
| 59 | placement++ | ||
| 51 | } | 60 | } |
| 52 | mapData.Records = records | 61 | mapData.Records = records |
| 53 | } else { | 62 | } else { |
| 54 | var records []models.RecordSP | 63 | var records []models.RecordSP |
| 55 | sql = `SELECT id, user_id, score_count, score_time, demo_id, record_date | 64 | sql = `SELECT id, user_id, score_count, score_time, demo_id, record_date |
| 56 | FROM records_sp WHERE map_id = $1;` | 65 | FROM records_sp WHERE map_id = $1 ORDER BY score_count, score_time;` |
| 57 | rows, err := database.DB.Query(sql, id) | 66 | rows, err := database.DB.Query(sql, id) |
| 58 | if err != nil { | 67 | if err != nil { |
| 59 | c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) | 68 | c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) |
| 60 | return | 69 | return |
| 61 | } | 70 | } |
| 71 | placement := 1 | ||
| 72 | ties := 0 | ||
| 62 | for rows.Next() { | 73 | for rows.Next() { |
| 63 | var record models.RecordSP | 74 | var record models.RecordSP |
| 64 | err := rows.Scan(&record.RecordID, &record.UserID, &record.ScoreCount, &record.ScoreTime, &record.DemoID, &record.RecordDate) | 75 | err := rows.Scan(&record.RecordID, &record.UserID, &record.ScoreCount, &record.ScoreTime, &record.DemoID, &record.RecordDate) |
| @@ -66,7 +77,14 @@ func FetchMap(c *gin.Context) { | |||
| 66 | c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) | 77 | c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) |
| 67 | return | 78 | return |
| 68 | } | 79 | } |
| 80 | if len(records) != 0 && records[len(records)-1].ScoreTime == record.ScoreTime { | ||
| 81 | ties++ | ||
| 82 | record.Placement = placement - ties | ||
| 83 | } else { | ||
| 84 | record.Placement = placement | ||
| 85 | } | ||
| 69 | records = append(records, record) | 86 | records = append(records, record) |
| 87 | placement++ | ||
| 70 | } | 88 | } |
| 71 | mapData.Records = records | 89 | mapData.Records = records |
| 72 | } | 90 | } |
diff --git a/backend/models/models.go b/backend/models/models.go index 8e710b7..0c380ff 100644 --- a/backend/models/models.go +++ b/backend/models/models.go | |||
| @@ -34,6 +34,7 @@ type Map struct { | |||
| 34 | 34 | ||
| 35 | type RecordSP struct { | 35 | type RecordSP struct { |
| 36 | RecordID int `json:"record_id"` | 36 | RecordID int `json:"record_id"` |
| 37 | Placement int `json:"placement"` | ||
| 37 | UserID string `json:"user_id"` | 38 | UserID string `json:"user_id"` |
| 38 | ScoreCount int `json:"score_count"` | 39 | ScoreCount int `json:"score_count"` |
| 39 | ScoreTime int `json:"score_time"` | 40 | ScoreTime int `json:"score_time"` |
| @@ -43,6 +44,7 @@ type RecordSP struct { | |||
| 43 | 44 | ||
| 44 | type RecordMP struct { | 45 | type RecordMP struct { |
| 45 | RecordID int `json:"record_id"` | 46 | RecordID int `json:"record_id"` |
| 47 | Placement int `json:"placement"` | ||
| 46 | HostID string `json:"host_id"` | 48 | HostID string `json:"host_id"` |
| 47 | PartnerID string `json:"partner_id"` | 49 | PartnerID string `json:"partner_id"` |
| 48 | ScoreCount int `json:"score_count"` | 50 | ScoreCount int `json:"score_count"` |