aboutsummaryrefslogtreecommitdiff
path: root/backend/controllers/userController.go
diff options
context:
space:
mode:
authorArda Serdar Pektezol <1669855+pektezol@users.noreply.github.com>2023-08-24 22:34:05 +0300
committerArda Serdar Pektezol <1669855+pektezol@users.noreply.github.com>2023-08-24 22:34:05 +0300
commitca973edc28b5fe543c583217896590f4a2e98897 (patch)
tree7f37713ac587ef80fb3a17d869d01520a1d94dca /backend/controllers/userController.go
parentMerge branch 'main' of https://github.com/pektezol/LeastPortalsHub (diff)
downloadlphub-ca973edc28b5fe543c583217896590f4a2e98897.tar.gz
lphub-ca973edc28b5fe543c583217896590f4a2e98897.tar.bz2
lphub-ca973edc28b5fe543c583217896590f4a2e98897.zip
fix: mod flag for easy check (#49)
Former-commit-id: 06ee23ee9659834252d3cb5c3c255797e9f93b62
Diffstat (limited to '')
-rw-r--r--backend/controllers/userController.go95
1 files changed, 46 insertions, 49 deletions
diff --git a/backend/controllers/userController.go b/backend/controllers/userController.go
index 0dae155..64f144a 100644
--- a/backend/controllers/userController.go
+++ b/backend/controllers/userController.go
@@ -17,8 +17,39 @@ type ProfileResponse struct {
17 UserName string `json:"user_name"` 17 UserName string `json:"user_name"`
18 AvatarLink string `json:"avatar_link"` 18 AvatarLink string `json:"avatar_link"`
19 CountryCode string `json:"country_code"` 19 CountryCode string `json:"country_code"`
20 ScoresSP []ScoreResponse `json:"scores_sp"` 20 Titles []models.Title `json:"titles"`
21 ScoresMP []ScoreResponse `json:"scores_mp"` 21 Links models.Links `json:"links"`
22 Rankings ProfileRankings `json:"rankings"`
23 Records ProfileRecords `json:"records"`
24}
25
26type ProfileRankings struct {
27 Overall ProfileRankingsDetails `json:"overall"`
28 Singleplayer ProfileRankingsDetails `json:"singleplayer"`
29 Cooperative ProfileRankingsDetails `json:"cooperative"`
30}
31
32type ProfileRankingsDetails struct {
33 Rank int `json:"rank"`
34 CompletionCount int `json:"completion_count"`
35 CompletionTotal int `json:"completion_total"`
36}
37
38type ProfileRecords struct {
39 P2Singleplayer ProfileRecordsDetails `json:"portal2_singleplayer"`
40 P2Cooperative ProfileRecordsDetails `json:"portal2_cooperative"`
41}
42
43type ProfileRecordsDetails struct {
44 MapID int `json:"map_id"`
45 Scores []ProfileScores `json:"scores"`
46}
47
48type ProfileScores struct {
49 DemoID string `json:"demo_id"`
50 ScoreCount int `json:"score_count"`
51 ScoreTime int `json:"score_time"`
52 Date time.Time `json:"date"`
22} 53}
23 54
24type ScoreResponse struct { 55type ScoreResponse struct {
@@ -44,58 +75,22 @@ func Profile(c *gin.Context) {
44 c.JSON(http.StatusUnauthorized, models.ErrorResponse("User not logged in.")) 75 c.JSON(http.StatusUnauthorized, models.ErrorResponse("User not logged in."))
45 return 76 return
46 } 77 }
47 // Retrieve singleplayer records 78 // Get user titles
48 var scoresSP []ScoreResponse 79 titles := []models.Title{}
49 sql := `SELECT id, map_id, score_count, score_time, demo_id, record_date FROM records_sp WHERE user_id = $1 ORDER BY map_id` 80 sql := `SELECT t.title_name, t.title_color FROM titles t
81 INNER JOIN user_titles ut ON t.id=ut.title_id WHERE ut.user_id = $1`
50 rows, err := database.DB.Query(sql, user.(models.User).SteamID) 82 rows, err := database.DB.Query(sql, user.(models.User).SteamID)
51 if err != nil { 83 if err != nil {
52 c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) 84 c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error()))
53 return 85 return
54 } 86 }
55 var recordsSP []models.RecordSP
56 for rows.Next() {
57 var mapID int
58 var record models.RecordSP
59 rows.Scan(&record.RecordID, &mapID, &record.ScoreCount, &record.ScoreTime, &record.DemoID, &record.RecordDate)
60 // More than one record in one map
61 if len(scoresSP) != 0 && mapID == scoresSP[len(scoresSP)-1].MapID {
62 scoresSP[len(scoresSP)-1].Records = append(scoresSP[len(scoresSP)-1].Records.([]models.RecordSP), record)
63 continue
64 }
65 // New map
66 recordsSP = []models.RecordSP{}
67 recordsSP = append(recordsSP, record)
68 scoresSP = append(scoresSP, ScoreResponse{
69 MapID: mapID,
70 Records: recordsSP,
71 })
72 }
73 // Retrieve multiplayer records
74 var scoresMP []ScoreResponse
75 sql = `SELECT id, map_id, host_id, partner_id, score_count, score_time, host_demo_id, partner_demo_id, record_date FROM records_mp
76 WHERE host_id = $1 OR partner_id = $2 ORDER BY map_id`
77 rows, err = database.DB.Query(sql, user.(models.User).SteamID, user.(models.User).SteamID)
78 if err != nil {
79 c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error()))
80 return
81 }
82 var recordsMP []models.RecordMP
83 for rows.Next() { 87 for rows.Next() {
84 var mapID int 88 var title models.Title
85 var record models.RecordMP 89 if err := rows.Scan(&title.Name, &title.Color); err != nil {
86 rows.Scan(&record.RecordID, &mapID, &record.HostID, &record.PartnerID, &record.ScoreCount, &record.ScoreTime, &record.HostDemoID, &record.PartnerDemoID, &record.RecordDate) 90 c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error()))
87 // More than one record in one map 91 return
88 if len(scoresMP) != 0 && mapID == scoresMP[len(scoresMP)-1].MapID {
89 scoresMP[len(scoresMP)-1].Records = append(scoresMP[len(scoresMP)-1].Records.([]models.RecordMP), record)
90 continue
91 } 92 }
92 // New map 93 titles = append(titles, title)
93 recordsMP = []models.RecordMP{}
94 recordsMP = append(recordsMP, record)
95 scoresMP = append(scoresMP, ScoreResponse{
96 MapID: mapID,
97 Records: recordsMP,
98 })
99 } 94 }
100 c.JSON(http.StatusOK, models.Response{ 95 c.JSON(http.StatusOK, models.Response{
101 Success: true, 96 Success: true,
@@ -106,8 +101,10 @@ func Profile(c *gin.Context) {
106 UserName: user.(models.User).UserName, 101 UserName: user.(models.User).UserName,
107 AvatarLink: user.(models.User).AvatarLink, 102 AvatarLink: user.(models.User).AvatarLink,
108 CountryCode: user.(models.User).CountryCode, 103 CountryCode: user.(models.User).CountryCode,
109 ScoresSP: scoresSP, 104 Titles: user.(models.User).Titles,
110 ScoresMP: scoresMP, 105 Links: models.Links{},
106 Rankings: ProfileRankings{},
107 Records: ProfileRecords{},
111 }, 108 },
112 }) 109 })
113 return 110 return