diff --git a/README.md b/README.md index e572c1d..c85ad07 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ if err != nil { } players, err := client.Players.List(ctx, rudder.ListPlayersParameters{Limit: 100}) -entries, err := client.Leaderboards.Results(ctx, "weekly") +entries, err := client.Leaderboards.ListEntries(ctx, "weekly") wallet, err := client.Wallet.Adjust(ctx, playerID, rudder.AdjustWalletParameters{ CurrencyCode: "coins", Amount: 100, diff --git a/leaderboards.go b/leaderboards.go index 406b07e..09776ff 100644 --- a/leaderboards.go +++ b/leaderboards.go @@ -12,10 +12,31 @@ type LeaderboardsService struct { transport *transport } -func (s *LeaderboardsService) Results(ctx context.Context, slug string) ([]models.RankEntry, error) { - var response models.GetLeaderboardResultsResponse - if err := s.transport.do(ctx, http.MethodGet, "/leaderboards/"+url.PathEscape(slug)+"/results", nil, nil, &response); err != nil { +func (s *LeaderboardsService) ListEntries(ctx context.Context, slug string) ([]models.RankEntry, error) { + var response models.ListLeaderboardEntriesResponse + + if err := s.transport.do(ctx, http.MethodGet, "/leaderboards/"+url.PathEscape(slug)+"/entries", nil, nil, &response); err != nil { return nil, err } + return response.Entries, nil } + +func (s *LeaderboardsService) DeleteEntry(ctx context.Context, slug string, entryID string) error { + return s.transport.do(ctx, http.MethodDelete, "/leaderboards/"+url.PathEscape(slug)+"/entries/"+url.PathEscape(entryID), nil, nil, nil) +} + +func (s *LeaderboardsService) UpdateEntry(ctx context.Context, slug string, entry *models.RankEntry) error { + body := models.UpdateLeaderboardEntryRequest{ + Score: entry.Score, + } + return s.transport.do(ctx, http.MethodPatch, "/leaderboards/"+url.PathEscape(slug)+"/entries/"+url.PathEscape(entry.PlayerID), nil, body, nil) +} + +func (s *LeaderboardsService) SubmitEntry(ctx context.Context, slug string, entry *models.RankEntry) error { + body := models.SubmitLeaderboardEntryRequest{ + PlayerID: entry.PlayerID, + Score: entry.Score, + } + return s.transport.do(ctx, http.MethodPost, "/leaderboards/"+url.PathEscape(slug)+"/entries", nil, body, nil) +} diff --git a/models/getleaderboardresultsresponse.go b/models/listleaderboardentriesresponse.go similarity index 70% rename from models/getleaderboardresultsresponse.go rename to models/listleaderboardentriesresponse.go index 59dc31f..823ceda 100644 --- a/models/getleaderboardresultsresponse.go +++ b/models/listleaderboardentriesresponse.go @@ -2,6 +2,6 @@ package models -type GetLeaderboardResultsResponse struct { +type ListLeaderboardEntriesResponse struct { Entries []RankEntry `json:"entries,omitempty"` } diff --git a/models/submitleaderboardentryrequest.go b/models/submitleaderboardentryrequest.go new file mode 100644 index 0000000..c0960ce --- /dev/null +++ b/models/submitleaderboardentryrequest.go @@ -0,0 +1,8 @@ +// Code generated by apigen. DO NOT EDIT. + +package models + +type SubmitLeaderboardEntryRequest struct { + PlayerID string `json:"playerId,omitempty"` + Score float64 `json:"score,omitempty"` +} diff --git a/models/updateleaderboardentryrequest.go b/models/updateleaderboardentryrequest.go new file mode 100644 index 0000000..9c77517 --- /dev/null +++ b/models/updateleaderboardentryrequest.go @@ -0,0 +1,7 @@ +// Code generated by apigen. DO NOT EDIT. + +package models + +type UpdateLeaderboardEntryRequest struct { + Score float64 `json:"score,omitempty"` +}