From f1b7589b2936335957a6a1da1eea3d66233ad0ce Mon Sep 17 00:00:00 2001 From: Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> Date: Sat, 26 Aug 2023 08:53:24 +0300 Subject: refactor: reorganizing packages Former-commit-id: 99410223654c2a5ffc15fdab6ec3e921b5410cba --- backend/handlers/home.go | 294 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 294 insertions(+) create mode 100644 backend/handlers/home.go (limited to 'backend/handlers/home.go') diff --git a/backend/handlers/home.go b/backend/handlers/home.go new file mode 100644 index 0000000..6e9a0df --- /dev/null +++ b/backend/handlers/home.go @@ -0,0 +1,294 @@ +package handlers + +import ( + "log" + "net/http" + "strings" + + "github.com/gin-gonic/gin" + "github.com/pektezol/leastportalshub/backend/database" + "github.com/pektezol/leastportalshub/backend/models" +) + +type SearchResponse struct { + Players []models.UserShort `json:"players"` + Maps []models.MapShort `json:"maps"` +} + +type RankingsResponse struct { + RankingsSP []models.UserRanking `json:"rankings_sp"` + RankingsMP []models.UserRanking `json:"rankings_mp"` +} + +func Home(c *gin.Context) { + user, exists := c.Get("user") + if !exists { + c.JSON(200, "no id, not auth") + } else { + c.JSON(200, gin.H{ + "output": user, + }) + } +} + +// GET Rankings +// +// @Description Get rankings of every player. +// @Tags rankings +// @Produce json +// @Success 200 {object} models.Response{data=RankingsResponse} +// @Failure 400 {object} models.Response +// @Router /rankings [get] +func Rankings(c *gin.Context) { + rows, err := database.DB.Query(`SELECT steam_id, user_name FROM users`) + if err != nil { + c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) + return + } + var spRankings []models.UserRanking + var mpRankings []models.UserRanking + for rows.Next() { + var userID, username string + err := rows.Scan(&userID, &username) + if err != nil { + c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) + return + } + // Getting all sp records for each user + var uniqueSingleUserRecords, totalSingleMaps int + sql := `SELECT COUNT(DISTINCT map_id), (SELECT COUNT(map_name) FROM maps + WHERE is_coop = FALSE AND is_disabled = false) FROM records_sp WHERE user_id = $1` + err = database.DB.QueryRow(sql, userID).Scan(&uniqueSingleUserRecords, &totalSingleMaps) + if err != nil { + c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) + return + } + // Has all singleplayer records + if uniqueSingleUserRecords == totalSingleMaps { + var ranking models.UserRanking + ranking.UserID = userID + ranking.UserName = username + sql := `SELECT DISTINCT map_id, score_count FROM records_sp WHERE user_id = $1 ORDER BY map_id, score_count` + rows, err := database.DB.Query(sql, userID) + if err != nil { + c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) + return + } + totalScore := 0 + var maps []int + for rows.Next() { + var mapID, scoreCount int + rows.Scan(&mapID, &scoreCount) + if len(maps) != 0 && maps[len(maps)-1] == mapID { + continue + } + totalScore += scoreCount + maps = append(maps, mapID) + } + ranking.TotalScore = totalScore + spRankings = append(spRankings, ranking) + } + // Getting all mp records for each user + var uniqueMultiUserRecords, totalMultiMaps int + sql = `SELECT COUNT(DISTINCT map_id), (SELECT COUNT(map_name) FROM maps + WHERE is_coop = TRUE AND is_disabled = false) FROM records_mp WHERE host_id = $1 OR partner_id = $2` + err = database.DB.QueryRow(sql, userID, userID).Scan(&uniqueMultiUserRecords, &totalMultiMaps) + if err != nil { + c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) + return + } + // Has all singleplayer records + if uniqueMultiUserRecords == totalMultiMaps { + var ranking models.UserRanking + ranking.UserID = userID + ranking.UserName = username + sql := `SELECT DISTINCT map_id, score_count FROM records_mp WHERE host_id = $1 OR partner_id = $2 ORDER BY map_id, score_count` + rows, err := database.DB.Query(sql, userID, userID) + if err != nil { + c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) + return + } + totalScore := 0 + var maps []int + for rows.Next() { + var mapID, scoreCount int + rows.Scan(&mapID, &scoreCount) + if len(maps) != 0 && maps[len(maps)-1] == mapID { + continue + } + totalScore += scoreCount + maps = append(maps, mapID) + } + ranking.TotalScore = totalScore + mpRankings = append(mpRankings, ranking) + } + } + c.JSON(http.StatusOK, models.Response{ + Success: true, + Message: "Successfully retrieved rankings.", + Data: RankingsResponse{ + RankingsSP: spRankings, + RankingsMP: mpRankings, + }, + }) +} + +// GET Search With Query +// +// @Description Get all user and map data matching to the query. +// @Tags search +// @Produce json +// @Param q query string false "Search user or map name." +// @Success 200 {object} models.Response{data=SearchResponse} +// @Failure 400 {object} models.Response +// @Router /search [get] +func SearchWithQuery(c *gin.Context) { + query := c.Query("q") + query = strings.ToLower(query) + log.Println(query) + var response SearchResponse + // Cache all maps for faster response + var maps = []models.MapShort{ + {ID: 1, Name: "Container Ride"}, + {ID: 2, Name: "Portal Carousel"}, + {ID: 3, Name: "Portal Gun"}, + {ID: 4, Name: "Smooth Jazz"}, + {ID: 5, Name: "Cube Momentum"}, + {ID: 6, Name: "Future Starter"}, + {ID: 7, Name: "Secret Panel"}, + {ID: 8, Name: "Wakeup"}, + {ID: 9, Name: "Incinerator"}, + {ID: 10, Name: "Laser Intro"}, + {ID: 11, Name: "Laser Stairs"}, + {ID: 12, Name: "Dual Lasers"}, + {ID: 13, Name: "Laser Over Goo"}, + {ID: 14, Name: "Catapult Intro"}, + {ID: 15, Name: "Trust Fling"}, + {ID: 16, Name: "Pit Flings"}, + {ID: 17, Name: "Fizzler Intro"}, + {ID: 18, Name: "Ceiling Catapult"}, + {ID: 19, Name: "Ricochet"}, + {ID: 20, Name: "Bridge Intro"}, + {ID: 21, Name: "Bridge The Gap"}, + {ID: 22, Name: "Turret Intro"}, + {ID: 23, Name: "Laser Relays"}, + {ID: 24, Name: "Turret Blocker"}, + {ID: 25, Name: "Laser vs Turret"}, + {ID: 26, Name: "Pull The Rug"}, + {ID: 27, Name: "Column Blocker"}, + {ID: 28, Name: "Laser Chaining"}, + {ID: 29, Name: "Triple Laser"}, + {ID: 30, Name: "Jail Break"}, + {ID: 31, Name: "Escape"}, + {ID: 32, Name: "Turret Factory"}, + {ID: 33, Name: "Turret Sabotage"}, + {ID: 34, Name: "Neurotoxin Sabotage"}, + {ID: 35, Name: "Core"}, + {ID: 36, Name: "Underground"}, + {ID: 37, Name: "Cave Johnson"}, + {ID: 38, Name: "Repulsion Intro"}, + {ID: 39, Name: "Bomb Flings"}, + {ID: 40, Name: "Crazy Box"}, + {ID: 41, Name: "PotatOS"}, + {ID: 42, Name: "Propulsion Intro"}, + {ID: 43, Name: "Propulsion Flings"}, + {ID: 44, Name: "Conversion Intro"}, + {ID: 45, Name: "Three Gels"}, + {ID: 46, Name: "Test"}, + {ID: 47, Name: "Funnel Intro"}, + {ID: 48, Name: "Ceiling Button"}, + {ID: 49, Name: "Wall Button"}, + {ID: 50, Name: "Polarity"}, + {ID: 51, Name: "Funnel Catch"}, + {ID: 52, Name: "Stop The Box"}, + {ID: 53, Name: "Laser Catapult"}, + {ID: 54, Name: "Laser Platform"}, + {ID: 55, Name: "Propulsion Catch"}, + {ID: 56, Name: "Repulsion Polarity"}, + {ID: 57, Name: "Finale 1"}, + {ID: 58, Name: "Finale 2"}, + {ID: 59, Name: "Finale 3"}, + {ID: 60, Name: "Finale 4"}, + {ID: 61, Name: "Calibration"}, + {ID: 62, Name: "Hub"}, + {ID: 63, Name: "Doors"}, + {ID: 64, Name: "Buttons"}, + {ID: 65, Name: "Lasers"}, + {ID: 66, Name: "Rat Maze"}, + {ID: 67, Name: "Laser Crusher"}, + {ID: 68, Name: "Behind The Scenes"}, + {ID: 69, Name: "Flings"}, + {ID: 70, Name: "Infinifling"}, + {ID: 71, Name: "Team Retrieval"}, + {ID: 72, Name: "Vertical Flings"}, + {ID: 73, Name: "Catapults"}, + {ID: 74, Name: "Multifling"}, + {ID: 75, Name: "Fling Crushers"}, + {ID: 76, Name: "Industrial Fan"}, + {ID: 77, Name: "Cooperative Bridges"}, + {ID: 78, Name: "Bridge Swap"}, + {ID: 79, Name: "Fling Block"}, + {ID: 80, Name: "Catapult Block"}, + {ID: 81, Name: "Bridge Fling"}, + {ID: 82, Name: "Turret Walls"}, + {ID: 83, Name: "Turret Assasin"}, + {ID: 84, Name: "Bridge Testing"}, + {ID: 85, Name: "Cooperative Funnels"}, + {ID: 86, Name: "Funnel Drill"}, + {ID: 87, Name: "Funnel Catch"}, + {ID: 88, Name: "Funnel Laser"}, + {ID: 89, Name: "Cooperative Polarity"}, + {ID: 90, Name: "Funnel Hop"}, + {ID: 91, Name: "Advanced Polarity"}, + {ID: 92, Name: "Funnel Maze"}, + {ID: 93, Name: "Turret Warehouse"}, + {ID: 94, Name: "Repulsion Jumps"}, + {ID: 95, Name: "Double Bounce"}, + {ID: 96, Name: "Bridge Repulsion"}, + {ID: 97, Name: "Wall Repulsion"}, + {ID: 98, Name: "Propulsion Crushers"}, + {ID: 99, Name: "Turret Ninja"}, + {ID: 100, Name: "Propulsion Retrieval"}, + {ID: 101, Name: "Vault Entrance"}, + {ID: 102, Name: "Seperation"}, + {ID: 103, Name: "Triple Axis"}, + {ID: 104, Name: "Catapult Catch"}, + {ID: 105, Name: "Bridge Gels"}, + {ID: 106, Name: "Maintenance"}, + {ID: 107, Name: "Bridge Catch"}, + {ID: 108, Name: "Double Lift"}, + {ID: 109, Name: "Gel Maze"}, + {ID: 110, Name: "Crazier Box"}, + } + var filteredMaps []models.MapShort + for _, m := range maps { + if strings.Contains(strings.ToLower(m.Name), strings.ToLower(query)) { + filteredMaps = append(filteredMaps, m) + } + } + response.Maps = filteredMaps + if len(response.Maps) == 0 { + response.Maps = []models.MapShort{} + } + rows, err := database.DB.Query("SELECT steam_id, user_name FROM users WHERE lower(user_name) LIKE $1", "%"+query+"%") + if err != nil { + log.Fatal(err) + } + defer rows.Close() + for rows.Next() { + var user models.UserShort + if err := rows.Scan(&user.SteamID, &user.UserName); err != nil { + c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) + return + } + response.Players = append(response.Players, user) + } + if len(response.Players) == 0 { + response.Players = []models.UserShort{} + } + c.JSON(http.StatusOK, models.Response{ + Success: true, + Message: "Search successfully retrieved.", + Data: response, + }) +} -- cgit v1.2.3 From f2bfade4812a9f7b1f97593754c95359ce99e2f1 Mon Sep 17 00:00:00 2001 From: Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> Date: Sat, 2 Sep 2023 16:12:46 +0300 Subject: fix: optimize rankings Former-commit-id: 16b247861acea7b5c70a872db7b0397f9dc5c879 --- backend/handlers/home.go | 149 +++++++++++++++++++++++++---------------------- 1 file changed, 78 insertions(+), 71 deletions(-) (limited to 'backend/handlers/home.go') diff --git a/backend/handlers/home.go b/backend/handlers/home.go index 6e9a0df..53be1de 100644 --- a/backend/handlers/home.go +++ b/backend/handlers/home.go @@ -3,6 +3,7 @@ package handlers import ( "log" "net/http" + "sort" "strings" "github.com/gin-gonic/gin" @@ -16,8 +17,9 @@ type SearchResponse struct { } type RankingsResponse struct { - RankingsSP []models.UserRanking `json:"rankings_sp"` - RankingsMP []models.UserRanking `json:"rankings_mp"` + Overall []models.UserRanking `json:"rankings_overall"` + Singleplayer []models.UserRanking `json:"rankings_singleplayer"` + Multiplayer []models.UserRanking `json:"rankings_multiplayer"` } func Home(c *gin.Context) { @@ -40,96 +42,101 @@ func Home(c *gin.Context) { // @Failure 400 {object} models.Response // @Router /rankings [get] func Rankings(c *gin.Context) { - rows, err := database.DB.Query(`SELECT steam_id, user_name FROM users`) + response := RankingsResponse{ + Overall: []models.UserRanking{}, + Singleplayer: []models.UserRanking{}, + Multiplayer: []models.UserRanking{}, + } + // Singleplayer rankings + sql := `SELECT u.steam_id, u.user_name, COUNT(DISTINCT map_id), + (SELECT COUNT(maps.name) FROM maps INNER JOIN games g ON maps.game_id = g.id WHERE g.is_coop = FALSE AND is_disabled = false), + (SELECT SUM(min_score_count) AS total_min_score_count FROM ( + SELECT + user_id, + MIN(score_count) AS min_score_count + FROM records_sp + GROUP BY user_id, map_id + ) AS subquery + WHERE user_id = u.steam_id) + FROM records_sp sp JOIN users u ON u.steam_id = sp.user_id GROUP BY u.steam_id, u.user_name` + rows, err := database.DB.Query(sql) if err != nil { c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) return } - var spRankings []models.UserRanking - var mpRankings []models.UserRanking for rows.Next() { - var userID, username string - err := rows.Scan(&userID, &username) + ranking := models.UserRanking{} + var currentCount int + var totalCount int + err = rows.Scan(&ranking.UserID, &ranking.UserName, ¤tCount, &totalCount, &ranking.TotalScore) if err != nil { c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) return } - // Getting all sp records for each user - var uniqueSingleUserRecords, totalSingleMaps int - sql := `SELECT COUNT(DISTINCT map_id), (SELECT COUNT(map_name) FROM maps - WHERE is_coop = FALSE AND is_disabled = false) FROM records_sp WHERE user_id = $1` - err = database.DB.QueryRow(sql, userID).Scan(&uniqueSingleUserRecords, &totalSingleMaps) - if err != nil { - c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) - return + if currentCount != totalCount { + continue } - // Has all singleplayer records - if uniqueSingleUserRecords == totalSingleMaps { - var ranking models.UserRanking - ranking.UserID = userID - ranking.UserName = username - sql := `SELECT DISTINCT map_id, score_count FROM records_sp WHERE user_id = $1 ORDER BY map_id, score_count` - rows, err := database.DB.Query(sql, userID) - if err != nil { - c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) - return - } - totalScore := 0 - var maps []int - for rows.Next() { - var mapID, scoreCount int - rows.Scan(&mapID, &scoreCount) - if len(maps) != 0 && maps[len(maps)-1] == mapID { - continue - } - totalScore += scoreCount - maps = append(maps, mapID) - } - ranking.TotalScore = totalScore - spRankings = append(spRankings, ranking) - } - // Getting all mp records for each user - var uniqueMultiUserRecords, totalMultiMaps int - sql = `SELECT COUNT(DISTINCT map_id), (SELECT COUNT(map_name) FROM maps - WHERE is_coop = TRUE AND is_disabled = false) FROM records_mp WHERE host_id = $1 OR partner_id = $2` - err = database.DB.QueryRow(sql, userID, userID).Scan(&uniqueMultiUserRecords, &totalMultiMaps) + response.Singleplayer = append(response.Singleplayer, ranking) + } + // Multiplayer rankings + sql = `SELECT u.steam_id, u.user_name, COUNT(DISTINCT map_id), + (SELECT COUNT(maps.name) FROM maps INNER JOIN games g ON maps.game_id = g.id WHERE g.is_coop = FALSE AND is_disabled = false), + (SELECT SUM(min_score_count) AS total_min_score_count FROM ( + SELECT + host_id, + partner_id, + MIN(score_count) AS min_score_count + FROM records_mp + GROUP BY host_id, partner_id, map_id + ) AS subquery + WHERE host_id = u.steam_id OR partner_id = u.steam_id) + FROM records_mp mp JOIN users u ON u.steam_id = mp.host_id OR u.steam_id = mp.partner_id GROUP BY u.steam_id, u.user_name` + rows, err = database.DB.Query(sql) + if err != nil { + c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) + return + } + for rows.Next() { + ranking := models.UserRanking{} + var currentCount int + var totalCount int + err = rows.Scan(&ranking.UserID, &ranking.UserName, ¤tCount, &totalCount, &ranking.TotalScore) if err != nil { c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) return } - // Has all singleplayer records - if uniqueMultiUserRecords == totalMultiMaps { - var ranking models.UserRanking - ranking.UserID = userID - ranking.UserName = username - sql := `SELECT DISTINCT map_id, score_count FROM records_mp WHERE host_id = $1 OR partner_id = $2 ORDER BY map_id, score_count` - rows, err := database.DB.Query(sql, userID, userID) - if err != nil { - c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) - return - } - totalScore := 0 - var maps []int - for rows.Next() { - var mapID, scoreCount int - rows.Scan(&mapID, &scoreCount) - if len(maps) != 0 && maps[len(maps)-1] == mapID { - continue + if currentCount != totalCount { + continue + } + response.Multiplayer = append(response.Multiplayer, ranking) + } + // Has both so they are qualified for overall ranking + for _, spRanking := range response.Singleplayer { + for _, mpRanking := range response.Multiplayer { + if spRanking.UserID == mpRanking.UserID { + totalScore := spRanking.TotalScore + mpRanking.TotalScore + overallRanking := models.UserRanking{ + UserID: spRanking.UserID, + UserName: spRanking.UserName, + TotalScore: totalScore, } - totalScore += scoreCount - maps = append(maps, mapID) + response.Overall = append(response.Overall, overallRanking) } - ranking.TotalScore = totalScore - mpRankings = append(mpRankings, ranking) } } + sort.Slice(response.Singleplayer, func(i, j int) bool { + return response.Singleplayer[i].TotalScore < response.Singleplayer[j].TotalScore + }) + sort.Slice(response.Multiplayer, func(i, j int) bool { + return response.Multiplayer[i].TotalScore < response.Multiplayer[j].TotalScore + }) + sort.Slice(response.Overall, func(i, j int) bool { + return response.Overall[i].TotalScore < response.Overall[j].TotalScore + }) c.JSON(http.StatusOK, models.Response{ Success: true, Message: "Successfully retrieved rankings.", - Data: RankingsResponse{ - RankingsSP: spRankings, - RankingsMP: mpRankings, - }, + Data: response, }) } -- cgit v1.2.3 From dd9a047dc6512b3b6419ac4bd05a77bc22be95b0 Mon Sep 17 00:00:00 2001 From: Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> Date: Sat, 2 Sep 2023 16:26:48 +0300 Subject: fix: imrpoved user models on responses Former-commit-id: 3aeb7e76928081664f33a4012bd1d84c81eef77c --- backend/handlers/home.go | 9 ++++----- backend/handlers/map.go | 42 ++++++++++++++++++------------------------ backend/models/models.go | 11 ++++++++--- 3 files changed, 30 insertions(+), 32 deletions(-) (limited to 'backend/handlers/home.go') diff --git a/backend/handlers/home.go b/backend/handlers/home.go index 53be1de..eb3912c 100644 --- a/backend/handlers/home.go +++ b/backend/handlers/home.go @@ -68,7 +68,7 @@ func Rankings(c *gin.Context) { ranking := models.UserRanking{} var currentCount int var totalCount int - err = rows.Scan(&ranking.UserID, &ranking.UserName, ¤tCount, &totalCount, &ranking.TotalScore) + err = rows.Scan(&ranking.User.SteamID, &ranking.User.UserName, ¤tCount, &totalCount, &ranking.TotalScore) if err != nil { c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) return @@ -100,7 +100,7 @@ func Rankings(c *gin.Context) { ranking := models.UserRanking{} var currentCount int var totalCount int - err = rows.Scan(&ranking.UserID, &ranking.UserName, ¤tCount, &totalCount, &ranking.TotalScore) + err = rows.Scan(&ranking.User.SteamID, &ranking.User.UserName, ¤tCount, &totalCount, &ranking.TotalScore) if err != nil { c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) return @@ -113,11 +113,10 @@ func Rankings(c *gin.Context) { // Has both so they are qualified for overall ranking for _, spRanking := range response.Singleplayer { for _, mpRanking := range response.Multiplayer { - if spRanking.UserID == mpRanking.UserID { + if spRanking.User.SteamID == mpRanking.User.SteamID { totalScore := spRanking.TotalScore + mpRanking.TotalScore overallRanking := models.UserRanking{ - UserID: spRanking.UserID, - UserName: spRanking.UserName, + User: spRanking.User, TotalScore: totalScore, } response.Overall = append(response.Overall, overallRanking) diff --git a/backend/handlers/map.go b/backend/handlers/map.go index 0a0206e..1d9cee8 100644 --- a/backend/handlers/map.go +++ b/backend/handlers/map.go @@ -31,31 +31,25 @@ type ChapterMapsResponse struct { } type RecordSingleplayer struct { - Placement int `json:"placement"` - RecordID int `json:"record_id"` - ScoreCount int `json:"score_count"` - ScoreTime int `json:"score_time"` - UserID string `json:"user_id"` - UserName string `json:"user_name"` - UserAvatar string `json:"user_avatar"` - DemoID string `json:"demo_id"` - RecordDate time.Time `json:"record_date"` + Placement int `json:"placement"` + RecordID int `json:"record_id"` + ScoreCount int `json:"score_count"` + ScoreTime int `json:"score_time"` + User models.UserShortWithAvatar `json:"user"` + DemoID string `json:"demo_id"` + RecordDate time.Time `json:"record_date"` } type RecordMultiplayer struct { - Placement int `json:"placement"` - RecordID int `json:"record_id"` - ScoreCount int `json:"score_count"` - ScoreTime int `json:"score_time"` - HostID string `json:"host_id"` - HostName string `json:"host_name"` - HostAvatar string `json:"host_avatar"` - PartnerID string `json:"partner_id"` - PartnerName string `json:"partner_name"` - PartnerAvatar string `json:"partner_avatar"` - HostDemoID string `json:"host_demo_id"` - PartnerDemoID string `json:"partner_demo_id"` - RecordDate time.Time `json:"record_date"` + Placement int `json:"placement"` + RecordID int `json:"record_id"` + ScoreCount int `json:"score_count"` + ScoreTime int `json:"score_time"` + Host models.UserShortWithAvatar `json:"host"` + Partner models.UserShortWithAvatar `json:"partner"` + HostDemoID string `json:"host_demo_id"` + PartnerDemoID string `json:"partner_demo_id"` + RecordDate time.Time `json:"record_date"` } // GET Map Summary @@ -195,7 +189,7 @@ func FetchMapLeaderboards(c *gin.Context) { ties := 0 for rows.Next() { var record RecordMultiplayer - err := rows.Scan(&record.RecordID, &record.HostID, &record.HostName, &record.HostAvatar, &record.PartnerID, &record.PartnerName, &record.PartnerAvatar, &record.ScoreCount, &record.ScoreTime, &record.HostDemoID, &record.PartnerDemoID, &record.RecordDate) + err := rows.Scan(&record.RecordID, &record.Host.SteamID, &record.Host.UserName, &record.Host.AvatarLink, &record.Partner.SteamID, &record.Partner.UserName, &record.Partner.AvatarLink, &record.ScoreCount, &record.ScoreTime, &record.HostDemoID, &record.PartnerDemoID, &record.RecordDate) if err != nil { c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) return @@ -230,7 +224,7 @@ func FetchMapLeaderboards(c *gin.Context) { ties := 0 for rows.Next() { var record RecordSingleplayer - err := rows.Scan(&record.RecordID, &record.UserID, &record.UserName, &record.UserAvatar, &record.ScoreCount, &record.ScoreTime, &record.DemoID, &record.RecordDate) + err := rows.Scan(&record.RecordID, &record.User.SteamID, &record.User.UserName, &record.User.AvatarLink, &record.ScoreCount, &record.ScoreTime, &record.DemoID, &record.RecordDate) if err != nil { c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) return diff --git a/backend/models/models.go b/backend/models/models.go index b706d25..2d54295 100644 --- a/backend/models/models.go +++ b/backend/models/models.go @@ -33,6 +33,12 @@ type UserShort struct { UserName string `json:"user_name"` } +type UserShortWithAvatar struct { + SteamID string `json:"steam_id"` + UserName string `json:"user_name"` + AvatarLink string `json:"avatar_link"` +} + type Map struct { ID int `json:"id"` GameName string `json:"game_name"` @@ -71,9 +77,8 @@ type MapRecords struct { } type UserRanking struct { - UserID string `json:"user_id"` - UserName string `json:"user_name"` - TotalScore int `json:"total_score"` + User UserShort `json:"user"` + TotalScore int `json:"total_score"` } type Game struct { -- cgit v1.2.3 From bb5ec62a0da2cd689bc5c2d65f639ae90f4cc3b4 Mon Sep 17 00:00:00 2001 From: Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> Date: Sat, 2 Sep 2023 21:40:39 +0300 Subject: fix: remove redundant home route Former-commit-id: fbc6789b2ca54aeb13d8bc6e8ec406e524e00606 --- backend/api/routes.go | 1 - backend/handlers/home.go | 11 ----------- 2 files changed, 12 deletions(-) (limited to 'backend/handlers/home.go') diff --git a/backend/api/routes.go b/backend/api/routes.go index ac622d4..fd3b8cc 100644 --- a/backend/api/routes.go +++ b/backend/api/routes.go @@ -17,7 +17,6 @@ func InitRoutes(router *gin.Engine) { }) v1.GET("/token", handlers.GetCookie) v1.DELETE("/token", handlers.DeleteCookie) - v1.GET("/home", CheckAuth, handlers.Home) v1.GET("/login", handlers.Login) v1.GET("/profile", CheckAuth, handlers.Profile) v1.PUT("/profile", CheckAuth, handlers.UpdateCountryCode) diff --git a/backend/handlers/home.go b/backend/handlers/home.go index eb3912c..2095a74 100644 --- a/backend/handlers/home.go +++ b/backend/handlers/home.go @@ -22,17 +22,6 @@ type RankingsResponse struct { Multiplayer []models.UserRanking `json:"rankings_multiplayer"` } -func Home(c *gin.Context) { - user, exists := c.Get("user") - if !exists { - c.JSON(200, "no id, not auth") - } else { - c.JSON(200, gin.H{ - "output": user, - }) - } -} - // GET Rankings // // @Description Get rankings of every player. -- cgit v1.2.3