aboutsummaryrefslogtreecommitdiff
path: root/backend/handlers/home.go
diff options
context:
space:
mode:
Diffstat (limited to 'backend/handlers/home.go')
-rw-r--r--backend/handlers/home.go100
1 files changed, 94 insertions, 6 deletions
diff --git a/backend/handlers/home.go b/backend/handlers/home.go
index 1734d28..fd7c6c0 100644
--- a/backend/handlers/home.go
+++ b/backend/handlers/home.go
@@ -1,8 +1,11 @@
1package handlers 1package handlers
2 2
3import ( 3import (
4 "encoding/json"
5 "io"
4 "log" 6 "log"
5 "net/http" 7 "net/http"
8 "os"
6 "sort" 9 "sort"
7 "strings" 10 "strings"
8 11
@@ -18,9 +21,26 @@ type SearchResponse struct {
18} 21}
19 22
20type RankingsResponse struct { 23type RankingsResponse struct {
21 Overall []models.UserRanking `json:"rankings_overall"`
22 Singleplayer []models.UserRanking `json:"rankings_singleplayer"` 24 Singleplayer []models.UserRanking `json:"rankings_singleplayer"`
23 Multiplayer []models.UserRanking `json:"rankings_multiplayer"` 25 Multiplayer []models.UserRanking `json:"rankings_multiplayer"`
26 Overall []models.UserRanking `json:"rankings_overall"`
27}
28
29type SteamUserRanking struct {
30 UserName string `json:"user_name"`
31 AvatarLink string `json:"avatar_link"`
32 SteamID string `json:"steam_id"`
33 SpScore int `json:"sp_score"`
34 MpScore int `json:"mp_score"`
35 OverallScore int `json:"overall_score"`
36 SpRank int `json:"sp_rank"`
37 MpRank int `json:"mp_rank"`
38 OverallRank int `json:"overall_rank"`
39}
40type RankingsSteamResponse struct {
41 Singleplayer []SteamUserRanking `json:"rankings_singleplayer"`
42 Multiplayer []SteamUserRanking `json:"rankings_multiplayer"`
43 Overall []SteamUserRanking `json:"rankings_overall"`
24} 44}
25 45
26type MapShortWithGame struct { 46type MapShortWithGame struct {
@@ -30,18 +50,18 @@ type MapShortWithGame struct {
30 Map string `json:"map"` 50 Map string `json:"map"`
31} 51}
32 52
33// GET Rankings 53// GET Rankings LPHUB
34// 54//
35// @Description Get rankings of every player. 55// @Description Get rankings of every player from LPHUB.
36// @Tags rankings 56// @Tags rankings
37// @Produce json 57// @Produce json
38// @Success 200 {object} models.Response{data=RankingsResponse} 58// @Success 200 {object} models.Response{data=RankingsResponse}
39// @Router /rankings [get] 59// @Router /rankings/lphub [get]
40func Rankings(c *gin.Context) { 60func RankingsLPHUB(c *gin.Context) {
41 response := RankingsResponse{ 61 response := RankingsResponse{
42 Overall: []models.UserRanking{},
43 Singleplayer: []models.UserRanking{}, 62 Singleplayer: []models.UserRanking{},
44 Multiplayer: []models.UserRanking{}, 63 Multiplayer: []models.UserRanking{},
64 Overall: []models.UserRanking{},
45 } 65 }
46 // Singleplayer rankings 66 // Singleplayer rankings
47 sql := `SELECT u.steam_id, u.user_name, u.avatar_link, COUNT(DISTINCT map_id), 67 sql := `SELECT u.steam_id, u.user_name, u.avatar_link, COUNT(DISTINCT map_id),
@@ -171,6 +191,74 @@ func Rankings(c *gin.Context) {
171 }) 191 })
172} 192}
173 193
194// GET Rankings Steam
195//
196// @Description Get rankings of every player from Steam.
197// @Tags rankings
198// @Produce json
199// @Success 200 {object} models.Response{data=RankingsSteamResponse}
200// @Router /rankings/steam [get]
201func RankingsSteam(c *gin.Context) {
202 response := RankingsSteamResponse{
203 Singleplayer: []SteamUserRanking{},
204 Multiplayer: []SteamUserRanking{},
205 Overall: []SteamUserRanking{},
206 }
207 spJson, err := os.Open("../rankings/output/sp.json")
208 if err != nil {
209 c.JSON(http.StatusOK, models.ErrorResponse(err.Error()))
210 return
211 }
212 defer spJson.Close()
213 spJsonBytes, err := io.ReadAll(spJson)
214 if err != nil {
215 c.JSON(http.StatusOK, models.ErrorResponse(err.Error()))
216 return
217 }
218 err = json.Unmarshal(spJsonBytes, &response.Singleplayer)
219 if err != nil {
220 c.JSON(http.StatusOK, models.ErrorResponse(err.Error()))
221 return
222 }
223 mpJson, err := os.Open("../rankings/output/mp.json")
224 if err != nil {
225 c.JSON(http.StatusOK, models.ErrorResponse(err.Error()))
226 return
227 }
228 defer mpJson.Close()
229 mpJsonBytes, err := io.ReadAll(mpJson)
230 if err != nil {
231 c.JSON(http.StatusOK, models.ErrorResponse(err.Error()))
232 return
233 }
234 err = json.Unmarshal(mpJsonBytes, &response.Multiplayer)
235 if err != nil {
236 c.JSON(http.StatusOK, models.ErrorResponse(err.Error()))
237 return
238 }
239 overallJson, err := os.Open("../rankings/output/overall.json")
240 if err != nil {
241 c.JSON(http.StatusOK, models.ErrorResponse(err.Error()))
242 return
243 }
244 defer overallJson.Close()
245 overallJsonBytes, err := io.ReadAll(overallJson)
246 if err != nil {
247 c.JSON(http.StatusOK, models.ErrorResponse(err.Error()))
248 return
249 }
250 err = json.Unmarshal(overallJsonBytes, &response.Overall)
251 if err != nil {
252 c.JSON(http.StatusOK, models.ErrorResponse(err.Error()))
253 return
254 }
255 c.JSON(http.StatusOK, models.Response{
256 Success: true,
257 Message: "Successfully retrieved rankings.",
258 Data: response,
259 })
260}
261
174// GET Search With Query 262// GET Search With Query
175// 263//
176// @Description Get all user and map data matching to the query. 264// @Description Get all user and map data matching to the query.