From 780bcf4e02704553f0e3c4879c60230040bfa6f4 Mon Sep 17 00:00:00 2001 From: NeKz Date: Mon, 18 Nov 2024 08:54:57 +0100 Subject: feat/rankings: optimize Steam ID comparison (#236) --- rankings/models.go | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) (limited to 'rankings/models.go') diff --git a/rankings/models.go b/rankings/models.go index 1b349b0..0e15d34 100644 --- a/rankings/models.go +++ b/rankings/models.go @@ -1,5 +1,11 @@ package main +import ( + "encoding/json" + "fmt" + "strconv" +) + type Record struct { MapID int `json:"id"` MapName string `json:"name"` @@ -25,15 +31,34 @@ type LeaderboardEntries struct { Entry []LeaderboardEntry `xml:"entry"` } +type SteamID int64 + +func (m SteamID) MarshalJSON() ([]byte, error) { + return json.Marshal(strconv.FormatInt(int64(m), 10)) +} + +func (id *SteamID) UnmarshalJSON(data []byte) error { + var s string + if err := json.Unmarshal(data, &s); err == nil { + n, err := strconv.ParseInt(s, 10, 64) + if err != nil { + return err + } + *id = SteamID(n) + return nil + } + return fmt.Errorf("invalid type for SteamID: %s", data) +} + type LeaderboardEntry struct { - SteamID string `xml:"steamid"` - Score int `xml:"score"` + SteamID SteamID `xml:"steamid"` + Score int `xml:"score"` } type Player struct { Username string `json:"user_name"` AvatarLink string `json:"avatar_link"` - SteamID string `json:"steam_id"` + SteamID SteamID `json:"steam_id"` Entries []PlayerEntry `json:"-"` SpScoreCount int `json:"sp_score"` MpScoreCount int `json:"mp_score"` -- cgit v1.2.3