Skip to content

Commit

Permalink
Change functions to return structs instead of strings
Browse files Browse the repository at this point in the history
  • Loading branch information
jlgm committed Apr 11, 2018
1 parent 13b1445 commit 080b090
Showing 1 changed file with 87 additions and 16 deletions.
103 changes: 87 additions & 16 deletions lib/lib.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,37 @@ var (
once sync.Once
)

// Member maps an member identified by their publicID to their score and rank
type Member struct {
PublicID string
Score int
Rank int
}

//MemberList is a list of member
type MemberList struct {
Members []*Member
}

//Score will represent a Player Score in a Leaderboard
type Score struct {
LeaderboardID string
PublicID string
Score int
Rank int
}

//ScoreList is a list of Scores
type ScoreList struct {
Scores []*Score
}

//Response will determine if a request has been succeeded
type Response struct {
Success bool
Reason string
}

func getHTTPClient() *http.Client {
once.Do(func() {
client = &http.Client{}
Expand Down Expand Up @@ -139,62 +170,97 @@ func (p *Podium) GetLocalizedLeaderboard(locale string) string {
}

// GetTop returns the top players for this leaderboard. Page is 1-index
func (p *Podium) GetTop(leaderboard string, page int, pageSize int) (int, string, error) {
func (p *Podium) GetTop(leaderboard string, page int, pageSize int) (int, MemberList, error) {
route := p.buildGetTopURL(leaderboard, page, pageSize)
status, body, err := p.sendTo("GET", route, nil)
return status, body, err

var members MemberList
b := []byte(string(body))
err = json.Unmarshal(b, &members)

return status, members, err
}

// GetTopPercent returns the top x% of players in a leaderboard
func (p *Podium) GetTopPercent(leaderboard string, percentage int) (int, string, error) {
func (p *Podium) GetTopPercent(leaderboard string, percentage int) (int, MemberList, error) {
route := p.buildGetTopPercentURL(leaderboard, percentage)
status, body, err := p.sendTo("GET", route, nil)
return status, body, err

var members MemberList
b := []byte(string(body))
err = json.Unmarshal(b, &members)

return status, members, err
}

// UpdateScore updates the score of a particular player in a leaderboard
func (p *Podium) UpdateScore(leaderboard string, playerID string, score int) (int, string, error) {
func (p *Podium) UpdateScore(leaderboard string, playerID string, score int) (int, Member, error) {
route := p.buildUpdateScoreURL(leaderboard, playerID)
payload := map[string]interface{}{
"score": score,
}
status, body, err := p.sendTo("PUT", route, payload)
return status, body, err

var member Member
b := []byte(string(body))
err = json.Unmarshal(b, &member)

return status, member, err
}

// IncrementScore increments the score of a particular player in a leaderboard
func (p *Podium) IncrementScore(leaderboard string, playerID string, increment int) (int, string, error) {
func (p *Podium) IncrementScore(leaderboard string, playerID string, increment int) (int, Member, error) {
route := p.buildIncrementScoreURL(leaderboard, playerID)
payload := map[string]interface{}{
"increment": increment,
}
status, body, err := p.sendTo("PATCH", route, payload)
return status, body, err

var member Member
b := []byte(string(body))
err = json.Unmarshal(b, &member)

return status, member, err
}

// UpdateScores updates the score of a player in more than one leaderboard
func (p *Podium) UpdateScores(leaderboards []string, playerID string, score int) (int, string, error) {
func (p *Podium) UpdateScores(leaderboards []string, playerID string, score int) (int, ScoreList, error) {
route := p.buildUpdateScoresURL(playerID)
payload := map[string]interface{}{
"score": score,
"leaderboards": leaderboards,
}
status, body, err := p.sendTo("PUT", route, payload)
return status, body, err

var scores ScoreList
b := []byte(string(body))
err = json.Unmarshal(b, &scores)

return status, scores, err
}

// RemoveMemberFromLeaderboard removes a player from a leaderboard
func (p *Podium) RemoveMemberFromLeaderboard(leaderboard string, member string) (int, string, error) {
func (p *Podium) RemoveMemberFromLeaderboard(leaderboard string, member string) (int, Response, error) {
route := p.buildRemoveMemberFromLeaderboardURL(leaderboard, member)
status, body, err := p.sendTo("DELETE", route, nil)
return status, body, err

var response Response
b := []byte(string(body))
err = json.Unmarshal(b, &response)

return status, response, err
}

// GetPlayer shows score and rank of a particular player in a leaderboard
func (p *Podium) GetPlayer(leaderboard string, playerID string) (int, string, error) {
func (p *Podium) GetPlayer(leaderboard string, playerID string) (int, Member, error) {
route := p.buildGetPlayerURL(leaderboard, playerID)
status, body, err := p.sendTo("GET", route, nil)
return status, body, err

var member Member
b := []byte(string(body))
err = json.Unmarshal(b, &member)

return status, member, err
}

// Healthcheck verifies if podium is still up
Expand All @@ -205,8 +271,13 @@ func (p *Podium) Healthcheck() (int, string, error) {
}

// DeleteLeaderboard deletes the leaderboard from podium
func (p *Podium) DeleteLeaderboard(leaderboard string) (int, string, error) {
func (p *Podium) DeleteLeaderboard(leaderboard string) (int, Response, error) {
route := p.buildDeleteLeaderboardURL(leaderboard)
status, body, err := p.sendTo("DELETE", route, nil)
return status, body, err

var response Response
b := []byte(string(body))
err = json.Unmarshal(b, &response)

return status, response, err
}

0 comments on commit 080b090

Please sign in to comment.