From f3eda1e8b7cf6492869e916acb5e58291c363c1f Mon Sep 17 00:00:00 2001 From: edmand46 Date: Thu, 17 Sep 2026 12:08:03 +0300 Subject: [PATCH] feat: resource rows batch operations, drop removed domains, regenerated models --- client.go | 32 +++------ inventory.go | 53 -------------- leaderboard.go | 70 ------------------- leaderboards.go | 56 --------------- models/adminlistquestsresponse.go | 8 --- models/adminplayerdetails.go | 1 - models/adminplayerquest.go | 10 --- models/adminplayerquestobjective.go | 9 --- models/batchadjustplayerinventoryitemsitem.go | 10 --- .../batchadjustplayerinventoryitemsrequest.go | 8 --- ...batchadjustplayerinventoryitemsresponse.go | 7 -- models/batchcreateresourcerowitem.go | 11 +++ models/batchcreateresourcerowsrequest.go | 8 +++ .../batchdeleteleaderboardentriesrequest.go | 7 -- models/batchdeleteresourcerowitem.go | 8 +++ models/batchdeleteresourcerowsrequest.go | 8 +++ models/batchleaderboardentry.go | 8 --- models/batchplayerquestsitem.go | 8 --- models/batchplayerquestsrequest.go | 8 --- .../batchsubmitleaderboardentriesrequest.go | 7 -- .../batchupdateleaderboardentriesrequest.go | 7 -- models/batchupdateresourcerowitem.go | 12 ++++ models/batchupdateresourcerowsrequest.go | 8 +++ models/error_codes.go | 11 +-- models/errorresponse.go | 12 ++-- models/getleaderboardentryaroundresponse.go | 7 -- models/getplayerinventoryresponse.go | 8 --- models/inventoryitem.go | 10 --- models/leaderboarddefinition.go | 12 ---- models/listleaderboardentriesresponse.go | 8 --- models/listleaderboardsresponse.go | 8 --- models/listplayerquestsresponse.go | 7 -- models/listresourcerowsresponse.go | 8 +++ models/questdefinition.go | 13 ---- models/questobjective.go | 9 --- models/questrewarddefinition.go | 9 --- models/rankentry.go | 10 --- models/resourcerow.go | 15 ++++ models/resourcerowusage.go | 10 +++ modules.go | 35 ++++++++++ player.go | 10 --- player_inventory.go | 35 ---------- player_quests.go | 49 ------------- quests.go | 64 ----------------- resources.go | 55 +++++++++++++++ types.go | 18 ----- 46 files changed, 197 insertions(+), 590 deletions(-) delete mode 100644 inventory.go delete mode 100644 leaderboard.go delete mode 100644 leaderboards.go delete mode 100644 models/adminlistquestsresponse.go delete mode 100644 models/adminplayerquest.go delete mode 100644 models/adminplayerquestobjective.go delete mode 100644 models/batchadjustplayerinventoryitemsitem.go delete mode 100644 models/batchadjustplayerinventoryitemsrequest.go delete mode 100644 models/batchadjustplayerinventoryitemsresponse.go create mode 100644 models/batchcreateresourcerowitem.go create mode 100644 models/batchcreateresourcerowsrequest.go delete mode 100644 models/batchdeleteleaderboardentriesrequest.go create mode 100644 models/batchdeleteresourcerowitem.go create mode 100644 models/batchdeleteresourcerowsrequest.go delete mode 100644 models/batchleaderboardentry.go delete mode 100644 models/batchplayerquestsitem.go delete mode 100644 models/batchplayerquestsrequest.go delete mode 100644 models/batchsubmitleaderboardentriesrequest.go delete mode 100644 models/batchupdateleaderboardentriesrequest.go create mode 100644 models/batchupdateresourcerowitem.go create mode 100644 models/batchupdateresourcerowsrequest.go delete mode 100644 models/getleaderboardentryaroundresponse.go delete mode 100644 models/getplayerinventoryresponse.go delete mode 100644 models/inventoryitem.go delete mode 100644 models/leaderboarddefinition.go delete mode 100644 models/listleaderboardentriesresponse.go delete mode 100644 models/listleaderboardsresponse.go delete mode 100644 models/listplayerquestsresponse.go create mode 100644 models/listresourcerowsresponse.go delete mode 100644 models/questdefinition.go delete mode 100644 models/questobjective.go delete mode 100644 models/questrewarddefinition.go delete mode 100644 models/rankentry.go create mode 100644 models/resourcerow.go create mode 100644 models/resourcerowusage.go create mode 100644 modules.go delete mode 100644 player_inventory.go delete mode 100644 player_quests.go delete mode 100644 quests.go create mode 100644 resources.go diff --git a/client.go b/client.go index b5c9e86..4c45e80 100644 --- a/client.go +++ b/client.go @@ -15,12 +15,11 @@ type Config struct { } type Client struct { - Players *PlayersService - Leaderboards *LeaderboardsService - Wallet *WalletService - Inventory *InventoryService - Quests *QuestsService - Storage *StorageService + Players *PlayersService + Wallet *WalletService + Storage *StorageService + Resources *ResourcesService + Modules *ModulesService transport *transport } @@ -47,12 +46,11 @@ func New(config Config) (*Client, error) { } return &Client{ - Players: &PlayersService{transport: transport}, - Leaderboards: &LeaderboardsService{transport: transport}, - Wallet: &WalletService{transport: transport}, - Inventory: &InventoryService{transport: transport}, - Quests: &QuestsService{transport: transport}, - Storage: &StorageService{transport: transport}, + Players: &PlayersService{transport: transport}, + Wallet: &WalletService{transport: transport}, + Storage: &StorageService{transport: transport}, + Resources: &ResourcesService{transport: transport}, + Modules: &ModulesService{transport: transport}, transport: transport, }, nil @@ -64,15 +62,5 @@ func (c *Client) Player(playerID string) *PlayerHandle { transport: c.transport, players: c.Players, wallet: c.Wallet, - inventory: c.Inventory, - quests: c.Quests, - } -} - -func (c *Client) Leaderboard(slug string) *LeaderboardHandle { - return &LeaderboardHandle{ - slug: slug, - transport: c.transport, - leaderboards: c.Leaderboards, } } diff --git a/inventory.go b/inventory.go deleted file mode 100644 index 2a02cd2..0000000 --- a/inventory.go +++ /dev/null @@ -1,53 +0,0 @@ -package rudder - -import ( - "context" - "net/http" - "net/url" - "strconv" - - "hub.rudder.build/rudder/rudder-go-sdk/v2/models" -) - -type InventoryService struct { - transport *transport -} - -type AdjustInventoryParameters struct { - IdempotencyKey string - Items []InventoryAdjustment -} - -func (s *InventoryService) Adjust(ctx context.Context, parameters AdjustInventoryParameters) ([]InventoryItem, error) { - body := models.BatchAdjustPlayerInventoryItemsRequest{ - IdempotencyKey: parameters.IdempotencyKey, - Items: parameters.Items, - } - - var response models.BatchAdjustPlayerInventoryItemsResponse - if err := s.transport.do(ctx, http.MethodPost, "/players/inventory/adjust", nil, body, &response); err != nil { - return nil, err - } - return response.Items, nil -} - -type ListInventoryParameters struct { - Limit int - Cursor *string -} - -func (s *InventoryService) List(ctx context.Context, playerID string, parameters ListInventoryParameters) (*InventoryList, error) { - query := url.Values{} - if parameters.Limit > 0 { - query.Set("limit", strconv.Itoa(parameters.Limit)) - } - if parameters.Cursor != nil { - query.Set("cursor", *parameters.Cursor) - } - - var response InventoryList - if err := s.transport.do(ctx, http.MethodGet, "/players/"+url.PathEscape(playerID)+"/inventory", query, nil, &response); err != nil { - return nil, err - } - return &response, nil -} diff --git a/leaderboard.go b/leaderboard.go deleted file mode 100644 index ccf9ec9..0000000 --- a/leaderboard.go +++ /dev/null @@ -1,70 +0,0 @@ -package rudder - -import ( - "context" - "net/http" - "net/url" - "strconv" - - "hub.rudder.build/rudder/rudder-go-sdk/v2/models" -) - -type LeaderboardHandle struct { - slug string - transport *transport - leaderboards *LeaderboardsService -} - -type ListLeaderboardEntriesParameters struct { - Limit int - Cursor *string -} - -func (h *LeaderboardHandle) List(ctx context.Context, parameters ListLeaderboardEntriesParameters) (*RankList, error) { - query := url.Values{} - if parameters.Limit > 0 { - query.Set("limit", strconv.Itoa(parameters.Limit)) - } - if parameters.Cursor != nil { - query.Set("cursor", *parameters.Cursor) - } - - var response RankList - if err := h.transport.do(ctx, http.MethodGet, "/leaderboards/"+url.PathEscape(h.slug)+"/entries", query, nil, &response); err != nil { - return nil, err - } - return &response, nil -} - -func (h *LeaderboardHandle) Get(ctx context.Context, playerID string) (*Rank, error) { - var response Rank - if err := h.transport.do(ctx, http.MethodGet, "/leaderboards/"+url.PathEscape(h.slug)+"/entries/"+url.PathEscape(playerID), nil, nil, &response); err != nil { - return nil, err - } - return &response, nil -} - -func (h *LeaderboardHandle) GetAround(ctx context.Context, playerID string, limit int) ([]Rank, error) { - query := url.Values{} - if limit > 0 { - query.Set("limit", strconv.Itoa(limit)) - } - - var response models.GetLeaderboardEntryAroundResponse - if err := h.transport.do(ctx, http.MethodGet, "/leaderboards/"+url.PathEscape(h.slug)+"/entries/"+url.PathEscape(playerID)+"/around", query, nil, &response); err != nil { - return nil, err - } - return response.Entries, nil -} - -func (h *LeaderboardHandle) Submit(ctx context.Context, items []LeaderboardScore) error { - return h.leaderboards.Submit(ctx, h.slug, items) -} - -func (h *LeaderboardHandle) Update(ctx context.Context, items []LeaderboardScore) error { - return h.leaderboards.Update(ctx, h.slug, items) -} - -func (h *LeaderboardHandle) Delete(ctx context.Context, playerIDs []string) error { - return h.leaderboards.Delete(ctx, h.slug, playerIDs) -} diff --git a/leaderboards.go b/leaderboards.go deleted file mode 100644 index 1eb72b1..0000000 --- a/leaderboards.go +++ /dev/null @@ -1,56 +0,0 @@ -package rudder - -import ( - "context" - "net/http" - "net/url" - "strconv" - - "hub.rudder.build/rudder/rudder-go-sdk/v2/models" -) - -type LeaderboardsService struct { - transport *transport -} - -type ListLeaderboardsParameters struct { - Limit int - Cursor *string -} - -func (s *LeaderboardsService) List(ctx context.Context, parameters ListLeaderboardsParameters) (*LeaderboardList, error) { - query := url.Values{} - if parameters.Limit > 0 { - query.Set("limit", strconv.Itoa(parameters.Limit)) - } - if parameters.Cursor != nil { - query.Set("cursor", *parameters.Cursor) - } - - var response LeaderboardList - if err := s.transport.do(ctx, http.MethodGet, "/leaderboards", query, nil, &response); err != nil { - return nil, err - } - return &response, nil -} - -func (s *LeaderboardsService) Submit(ctx context.Context, slug string, items []LeaderboardScore) error { - body := models.BatchSubmitLeaderboardEntriesRequest{ - Items: items, - } - return s.transport.do(ctx, http.MethodPost, "/leaderboards/"+url.PathEscape(slug)+"/entries", nil, body, nil) -} - -func (s *LeaderboardsService) Update(ctx context.Context, slug string, items []LeaderboardScore) error { - body := models.BatchUpdateLeaderboardEntriesRequest{ - Items: items, - } - return s.transport.do(ctx, http.MethodPatch, "/leaderboards/"+url.PathEscape(slug)+"/entries", nil, body, nil) -} - -func (s *LeaderboardsService) Delete(ctx context.Context, slug string, playerIDs []string) error { - body := models.BatchDeleteLeaderboardEntriesRequest{ - PlayerIds: playerIDs, - } - return s.transport.do(ctx, http.MethodDelete, "/leaderboards/"+url.PathEscape(slug)+"/entries", nil, body, nil) -} diff --git a/models/adminlistquestsresponse.go b/models/adminlistquestsresponse.go deleted file mode 100644 index 8daa28b..0000000 --- a/models/adminlistquestsresponse.go +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by apigen. DO NOT EDIT. - -package models - -type AdminListQuestsResponse struct { - Items []QuestDefinition `json:"items,omitempty"` - NextCursor string `json:"nextCursor,omitempty"` -} diff --git a/models/adminplayerdetails.go b/models/adminplayerdetails.go index 4d9f8cc..5aa9713 100644 --- a/models/adminplayerdetails.go +++ b/models/adminplayerdetails.go @@ -4,7 +4,6 @@ package models type AdminPlayerDetails struct { Identities []PlayerIdentity `json:"identities,omitempty"` - Inventory []InventoryItem `json:"inventory,omitempty"` Player AdminPlayer `json:"player,omitempty"` Storages []PlayerStorage `json:"storages,omitempty"` WalletTransactions []WalletAudit `json:"walletTransactions,omitempty"` diff --git a/models/adminplayerquest.go b/models/adminplayerquest.go deleted file mode 100644 index f44786f..0000000 --- a/models/adminplayerquest.go +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by apigen. DO NOT EDIT. - -package models - -type AdminPlayerQuest struct { - Name string `json:"name,omitempty"` - Objectives []AdminPlayerQuestObjective `json:"objectives,omitempty"` - QuestSlug string `json:"questSlug,omitempty"` - Status string `json:"status,omitempty"` -} diff --git a/models/adminplayerquestobjective.go b/models/adminplayerquestobjective.go deleted file mode 100644 index bd6bb1e..0000000 --- a/models/adminplayerquestobjective.go +++ /dev/null @@ -1,9 +0,0 @@ -// Code generated by apigen. DO NOT EDIT. - -package models - -type AdminPlayerQuestObjective struct { - Current int64 `json:"current,omitempty"` - ObjectiveID string `json:"objectiveId,omitempty"` - Target int64 `json:"target,omitempty"` -} diff --git a/models/batchadjustplayerinventoryitemsitem.go b/models/batchadjustplayerinventoryitemsitem.go deleted file mode 100644 index 84eaccf..0000000 --- a/models/batchadjustplayerinventoryitemsitem.go +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by apigen. DO NOT EDIT. - -package models - -type BatchAdjustPlayerInventoryItemsItem struct { - Amount int64 `json:"amount,omitempty"` - PlayerID string `json:"playerId,omitempty"` - Reason string `json:"reason,omitempty"` - Slug string `json:"slug,omitempty"` -} diff --git a/models/batchadjustplayerinventoryitemsrequest.go b/models/batchadjustplayerinventoryitemsrequest.go deleted file mode 100644 index cdc8b30..0000000 --- a/models/batchadjustplayerinventoryitemsrequest.go +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by apigen. DO NOT EDIT. - -package models - -type BatchAdjustPlayerInventoryItemsRequest struct { - IdempotencyKey string `json:"idempotencyKey,omitempty"` - Items []BatchAdjustPlayerInventoryItemsItem `json:"items,omitempty"` -} diff --git a/models/batchadjustplayerinventoryitemsresponse.go b/models/batchadjustplayerinventoryitemsresponse.go deleted file mode 100644 index d235f0a..0000000 --- a/models/batchadjustplayerinventoryitemsresponse.go +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by apigen. DO NOT EDIT. - -package models - -type BatchAdjustPlayerInventoryItemsResponse struct { - Items []InventoryItem `json:"items,omitempty"` -} diff --git a/models/batchcreateresourcerowitem.go b/models/batchcreateresourcerowitem.go new file mode 100644 index 0000000..28ef24d --- /dev/null +++ b/models/batchcreateresourcerowitem.go @@ -0,0 +1,11 @@ +// Code generated by apigen. DO NOT EDIT. + +package models + +import "encoding/json" + +type BatchCreateResourceRowItem struct { + Data json.RawMessage `json:"data,omitempty"` + ID string `json:"id,omitempty"` + PlayerID string `json:"playerId,omitempty"` +} diff --git a/models/batchcreateresourcerowsrequest.go b/models/batchcreateresourcerowsrequest.go new file mode 100644 index 0000000..feb6f7f --- /dev/null +++ b/models/batchcreateresourcerowsrequest.go @@ -0,0 +1,8 @@ +// Code generated by apigen. DO NOT EDIT. + +package models + +type BatchCreateResourceRowsRequest struct { + IdempotencyKey string `json:"idempotencyKey,omitempty"` + Items []BatchCreateResourceRowItem `json:"items,omitempty"` +} diff --git a/models/batchdeleteleaderboardentriesrequest.go b/models/batchdeleteleaderboardentriesrequest.go deleted file mode 100644 index 15943c1..0000000 --- a/models/batchdeleteleaderboardentriesrequest.go +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by apigen. DO NOT EDIT. - -package models - -type BatchDeleteLeaderboardEntriesRequest struct { - PlayerIds []string `json:"playerIds,omitempty"` -} diff --git a/models/batchdeleteresourcerowitem.go b/models/batchdeleteresourcerowitem.go new file mode 100644 index 0000000..a5c2c88 --- /dev/null +++ b/models/batchdeleteresourcerowitem.go @@ -0,0 +1,8 @@ +// Code generated by apigen. DO NOT EDIT. + +package models + +type BatchDeleteResourceRowItem struct { + ID string `json:"id,omitempty"` + PlayerID string `json:"playerId,omitempty"` +} diff --git a/models/batchdeleteresourcerowsrequest.go b/models/batchdeleteresourcerowsrequest.go new file mode 100644 index 0000000..694fec8 --- /dev/null +++ b/models/batchdeleteresourcerowsrequest.go @@ -0,0 +1,8 @@ +// Code generated by apigen. DO NOT EDIT. + +package models + +type BatchDeleteResourceRowsRequest struct { + IdempotencyKey string `json:"idempotencyKey,omitempty"` + Items []BatchDeleteResourceRowItem `json:"items,omitempty"` +} diff --git a/models/batchleaderboardentry.go b/models/batchleaderboardentry.go deleted file mode 100644 index 3ff124f..0000000 --- a/models/batchleaderboardentry.go +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by apigen. DO NOT EDIT. - -package models - -type BatchLeaderboardEntry struct { - PlayerID string `json:"playerId,omitempty"` - Score float64 `json:"score,omitempty"` -} diff --git a/models/batchplayerquestsitem.go b/models/batchplayerquestsitem.go deleted file mode 100644 index c7b8354..0000000 --- a/models/batchplayerquestsitem.go +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by apigen. DO NOT EDIT. - -package models - -type BatchPlayerQuestsItem struct { - PlayerID string `json:"playerId,omitempty"` - QuestSlug string `json:"questSlug,omitempty"` -} diff --git a/models/batchplayerquestsrequest.go b/models/batchplayerquestsrequest.go deleted file mode 100644 index a630bf0..0000000 --- a/models/batchplayerquestsrequest.go +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by apigen. DO NOT EDIT. - -package models - -type BatchPlayerQuestsRequest struct { - IdempotencyKey string `json:"idempotencyKey,omitempty"` - Items []BatchPlayerQuestsItem `json:"items,omitempty"` -} diff --git a/models/batchsubmitleaderboardentriesrequest.go b/models/batchsubmitleaderboardentriesrequest.go deleted file mode 100644 index d31e39b..0000000 --- a/models/batchsubmitleaderboardentriesrequest.go +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by apigen. DO NOT EDIT. - -package models - -type BatchSubmitLeaderboardEntriesRequest struct { - Items []BatchLeaderboardEntry `json:"items,omitempty"` -} diff --git a/models/batchupdateleaderboardentriesrequest.go b/models/batchupdateleaderboardentriesrequest.go deleted file mode 100644 index 7761eae..0000000 --- a/models/batchupdateleaderboardentriesrequest.go +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by apigen. DO NOT EDIT. - -package models - -type BatchUpdateLeaderboardEntriesRequest struct { - Items []BatchLeaderboardEntry `json:"items,omitempty"` -} diff --git a/models/batchupdateresourcerowitem.go b/models/batchupdateresourcerowitem.go new file mode 100644 index 0000000..f8fe3fb --- /dev/null +++ b/models/batchupdateresourcerowitem.go @@ -0,0 +1,12 @@ +// Code generated by apigen. DO NOT EDIT. + +package models + +import "encoding/json" + +type BatchUpdateResourceRowItem struct { + Data json.RawMessage `json:"data,omitempty"` + ID string `json:"id,omitempty"` + PlayerID string `json:"playerId,omitempty"` + Version int64 `json:"version,omitempty"` +} diff --git a/models/batchupdateresourcerowsrequest.go b/models/batchupdateresourcerowsrequest.go new file mode 100644 index 0000000..73dce7d --- /dev/null +++ b/models/batchupdateresourcerowsrequest.go @@ -0,0 +1,8 @@ +// Code generated by apigen. DO NOT EDIT. + +package models + +type BatchUpdateResourceRowsRequest struct { + IdempotencyKey string `json:"idempotencyKey,omitempty"` + Items []BatchUpdateResourceRowItem `json:"items,omitempty"` +} diff --git a/models/error_codes.go b/models/error_codes.go index e80d61b..aaa695c 100644 --- a/models/error_codes.go +++ b/models/error_codes.go @@ -3,13 +3,6 @@ package models const ( - ErrorCodeEarlyCompletion = "early_completion" - ErrorCodeForbidden = "forbidden" - ErrorCodeLevelNotReached = "level_not_reached" - ErrorCodeNodeNotActive = "node_not_active" - ErrorCodeObjectivesIncomplete = "objectives_incomplete" - ErrorCodeRunExpired = "run_expired" - ErrorCodeRunNotActive = "run_not_active" - ErrorCodeScenarioNotActive = "scenario_not_active" - ErrorCodeUnknownRun = "unknown_run" + ErrorCodeForbidden = "forbidden" + ErrorCodeRowReferenced = "row_referenced" ) diff --git a/models/errorresponse.go b/models/errorresponse.go index 7eea118..93e154f 100644 --- a/models/errorresponse.go +++ b/models/errorresponse.go @@ -3,9 +3,11 @@ package models type ErrorResponse struct { - Code string `json:"code,omitempty"` - Error string `json:"error,omitempty"` - Index int `json:"index,omitempty"` - PlayerID string `json:"playerId,omitempty"` - RequestID string `json:"requestId,omitempty"` + Code string `json:"code,omitempty"` + Error string `json:"error,omitempty"` + Index int `json:"index,omitempty"` + Path string `json:"path,omitempty"` + PlayerID string `json:"playerId,omitempty"` + RequestID string `json:"requestId,omitempty"` + Usages []ResourceRowUsage `json:"usages,omitempty"` } diff --git a/models/getleaderboardentryaroundresponse.go b/models/getleaderboardentryaroundresponse.go deleted file mode 100644 index 65a298e..0000000 --- a/models/getleaderboardentryaroundresponse.go +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by apigen. DO NOT EDIT. - -package models - -type GetLeaderboardEntryAroundResponse struct { - Entries []RankEntry `json:"entries,omitempty"` -} diff --git a/models/getplayerinventoryresponse.go b/models/getplayerinventoryresponse.go deleted file mode 100644 index 4f26fd0..0000000 --- a/models/getplayerinventoryresponse.go +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by apigen. DO NOT EDIT. - -package models - -type GetPlayerInventoryResponse struct { - Items []InventoryItem `json:"items,omitempty"` - NextCursor string `json:"nextCursor,omitempty"` -} diff --git a/models/inventoryitem.go b/models/inventoryitem.go deleted file mode 100644 index 4378839..0000000 --- a/models/inventoryitem.go +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by apigen. DO NOT EDIT. - -package models - -type InventoryItem struct { - Amount int64 `json:"amount,omitempty"` - ID string `json:"id,omitempty"` - Slug string `json:"slug,omitempty"` - UpdatedAt string `json:"updatedAt,omitempty"` -} diff --git a/models/leaderboarddefinition.go b/models/leaderboarddefinition.go deleted file mode 100644 index 91e46d2..0000000 --- a/models/leaderboarddefinition.go +++ /dev/null @@ -1,12 +0,0 @@ -// Code generated by apigen. DO NOT EDIT. - -package models - -type LeaderboardDefinition struct { - MaxEntries int64 `json:"maxEntries,omitempty"` - Metric string `json:"metric,omitempty"` - Name string `json:"name,omitempty"` - ResetPeriod string `json:"resetPeriod,omitempty"` - Slug string `json:"slug,omitempty"` - SortingOrder string `json:"sortingOrder,omitempty"` -} diff --git a/models/listleaderboardentriesresponse.go b/models/listleaderboardentriesresponse.go deleted file mode 100644 index a81ee7e..0000000 --- a/models/listleaderboardentriesresponse.go +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by apigen. DO NOT EDIT. - -package models - -type ListLeaderboardEntriesResponse struct { - Entries []RankEntry `json:"entries,omitempty"` - NextCursor string `json:"nextCursor,omitempty"` -} diff --git a/models/listleaderboardsresponse.go b/models/listleaderboardsresponse.go deleted file mode 100644 index c10396c..0000000 --- a/models/listleaderboardsresponse.go +++ /dev/null @@ -1,8 +0,0 @@ -// Code generated by apigen. DO NOT EDIT. - -package models - -type ListLeaderboardsResponse struct { - Items []LeaderboardDefinition `json:"items,omitempty"` - NextCursor string `json:"nextCursor,omitempty"` -} diff --git a/models/listplayerquestsresponse.go b/models/listplayerquestsresponse.go deleted file mode 100644 index 07a3e52..0000000 --- a/models/listplayerquestsresponse.go +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by apigen. DO NOT EDIT. - -package models - -type ListPlayerQuestsResponse struct { - Quests []AdminPlayerQuest `json:"quests,omitempty"` -} diff --git a/models/listresourcerowsresponse.go b/models/listresourcerowsresponse.go new file mode 100644 index 0000000..1b6ff14 --- /dev/null +++ b/models/listresourcerowsresponse.go @@ -0,0 +1,8 @@ +// Code generated by apigen. DO NOT EDIT. + +package models + +type ListResourceRowsResponse struct { + Items []ResourceRow `json:"items,omitempty"` + Total int `json:"total,omitempty"` +} diff --git a/models/questdefinition.go b/models/questdefinition.go deleted file mode 100644 index 57f9c7a..0000000 --- a/models/questdefinition.go +++ /dev/null @@ -1,13 +0,0 @@ -// Code generated by apigen. DO NOT EDIT. - -package models - -type QuestDefinition struct { - ID string `json:"id,omitempty"` - Name string `json:"name,omitempty"` - NextQuestID string `json:"nextQuestId,omitempty"` - Objectives []QuestObjective `json:"objectives,omitempty"` - Rewards []QuestRewardDefinition `json:"rewards,omitempty"` - Slug string `json:"slug,omitempty"` - Status string `json:"status,omitempty"` -} diff --git a/models/questobjective.go b/models/questobjective.go deleted file mode 100644 index 4c55ea1..0000000 --- a/models/questobjective.go +++ /dev/null @@ -1,9 +0,0 @@ -// Code generated by apigen. DO NOT EDIT. - -package models - -type QuestObjective struct { - ID string `json:"id,omitempty"` - Metric string `json:"metric,omitempty"` - Target int64 `json:"target,omitempty"` -} diff --git a/models/questrewarddefinition.go b/models/questrewarddefinition.go deleted file mode 100644 index ed5ea51..0000000 --- a/models/questrewarddefinition.go +++ /dev/null @@ -1,9 +0,0 @@ -// Code generated by apigen. DO NOT EDIT. - -package models - -type QuestRewardDefinition struct { - Amount int64 `json:"amount,omitempty"` - Currency string `json:"currency,omitempty"` - ItemID string `json:"itemId,omitempty"` -} diff --git a/models/rankentry.go b/models/rankentry.go deleted file mode 100644 index ab77f8a..0000000 --- a/models/rankentry.go +++ /dev/null @@ -1,10 +0,0 @@ -// Code generated by apigen. DO NOT EDIT. - -package models - -type RankEntry struct { - PlayerID string `json:"playerId,omitempty"` - PlayerName string `json:"playerName,omitempty"` - Rank int64 `json:"rank,omitempty"` - Score float64 `json:"score,omitempty"` -} diff --git a/models/resourcerow.go b/models/resourcerow.go new file mode 100644 index 0000000..e620454 --- /dev/null +++ b/models/resourcerow.go @@ -0,0 +1,15 @@ +// Code generated by apigen. DO NOT EDIT. + +package models + +import "encoding/json" + +type ResourceRow struct { + CreatedAt string `json:"createdAt,omitempty"` + Data json.RawMessage `json:"data,omitempty"` + ID string `json:"id,omitempty"` + PlayerID string `json:"playerId,omitempty"` + Rank int64 `json:"rank,omitempty"` + UpdatedAt string `json:"updatedAt,omitempty"` + Version int64 `json:"version,omitempty"` +} diff --git a/models/resourcerowusage.go b/models/resourcerowusage.go new file mode 100644 index 0000000..a147de9 --- /dev/null +++ b/models/resourcerowusage.go @@ -0,0 +1,10 @@ +// Code generated by apigen. DO NOT EDIT. + +package models + +type ResourceRowUsage struct { + DefinitionSlug string `json:"definitionSlug,omitempty"` + Field string `json:"field,omitempty"` + ModuleSlug string `json:"moduleSlug,omitempty"` + RowID string `json:"rowId,omitempty"` +} diff --git a/modules.go b/modules.go new file mode 100644 index 0000000..d9e0fc7 --- /dev/null +++ b/modules.go @@ -0,0 +1,35 @@ +package rudder + +import ( + "context" + "fmt" + "net/http" +) + +type ModulesService struct { + transport *transport +} + +type CallParameters struct { + Module string + Fn string + Args any + DryRun bool +} + +type CallResult struct { + Result any `json:"result"` + Error string `json:"error"` + Log []any `json:"log"` + Console []string `json:"console"` +} + +func (s *ModulesService) Call(ctx context.Context, parameters CallParameters) (*CallResult, error) { + var result CallResult + path := fmt.Sprintf("/modules/%s/%s", parameters.Module, parameters.Fn) + body := map[string]any{"args": parameters.Args, "dryRun": parameters.DryRun} + if err := s.transport.do(ctx, http.MethodPost, path, nil, body, &result); err != nil { + return nil, err + } + return &result, nil +} diff --git a/player.go b/player.go index 97485c5..d6c50ed 100644 --- a/player.go +++ b/player.go @@ -10,26 +10,16 @@ type PlayerHandle struct { transport *transport players *PlayersService wallet *WalletService - inventory *InventoryService - quests *QuestsService } func (h *PlayerHandle) Wallet() *PlayerWalletHandle { return &PlayerWalletHandle{playerID: h.playerID, wallet: h.wallet} } -func (h *PlayerHandle) Inventory() *PlayerInventoryHandle { - return &PlayerInventoryHandle{playerID: h.playerID, inventory: h.inventory} -} - func (h *PlayerHandle) Storage() *PlayerStorageHandle { return &PlayerStorageHandle{playerID: h.playerID, transport: h.transport} } -func (h *PlayerHandle) Quests() *PlayerQuestsHandle { - return &PlayerQuestsHandle{playerID: h.playerID, transport: h.transport, quests: h.quests} -} - type UpdatePlayerParameters struct { IdempotencyKey string Nickname string diff --git a/player_inventory.go b/player_inventory.go deleted file mode 100644 index c4b326e..0000000 --- a/player_inventory.go +++ /dev/null @@ -1,35 +0,0 @@ -package rudder - -import "context" - -type PlayerInventoryHandle struct { - playerID string - inventory *InventoryService -} - -type AdjustPlayerInventoryParameters struct { - IdempotencyKey string - Slug string - Amount int64 - Reason string -} - -func (h *PlayerInventoryHandle) Adjust(ctx context.Context, parameters AdjustPlayerInventoryParameters) (*InventoryItem, error) { - items, err := h.inventory.Adjust(ctx, AdjustInventoryParameters{ - IdempotencyKey: parameters.IdempotencyKey, - Items: []InventoryAdjustment{{ - PlayerID: h.playerID, - Slug: parameters.Slug, - Amount: parameters.Amount, - Reason: parameters.Reason, - }}, - }) - if err != nil { - return nil, err - } - return &items[0], nil -} - -func (h *PlayerInventoryHandle) List(ctx context.Context, parameters ListInventoryParameters) (*InventoryList, error) { - return h.inventory.List(ctx, h.playerID, parameters) -} diff --git a/player_quests.go b/player_quests.go deleted file mode 100644 index 920b32f..0000000 --- a/player_quests.go +++ /dev/null @@ -1,49 +0,0 @@ -package rudder - -import ( - "context" - "net/http" - "net/url" - - "hub.rudder.build/rudder/rudder-go-sdk/v2/models" -) - -type PlayerQuestsHandle struct { - playerID string - transport *transport - quests *QuestsService -} - -func (h *PlayerQuestsHandle) List(ctx context.Context) ([]PlayerQuest, error) { - var response models.ListPlayerQuestsResponse - if err := h.transport.do(ctx, http.MethodGet, "/players/"+url.PathEscape(h.playerID)+"/quests", nil, nil, &response); err != nil { - return nil, err - } - return response.Quests, nil -} - -type PlayerQuestParameters struct { - IdempotencyKey string - QuestSlug string -} - -func (h *PlayerQuestsHandle) Reset(ctx context.Context, parameters PlayerQuestParameters) error { - return h.quests.Reset(ctx, PlayerQuestsParameters{ - IdempotencyKey: parameters.IdempotencyKey, - Items: []PlayerQuestRef{{PlayerID: h.playerID, QuestSlug: parameters.QuestSlug}}, - }) -} - -func (h *PlayerQuestsHandle) ForceComplete(ctx context.Context, parameters PlayerQuestParameters) error { - return h.quests.ForceComplete(ctx, PlayerQuestsParameters{ - IdempotencyKey: parameters.IdempotencyKey, - Items: []PlayerQuestRef{{PlayerID: h.playerID, QuestSlug: parameters.QuestSlug}}, - }) -} - -func (h *PlayerQuestsHandle) ForceClaim(ctx context.Context, parameters PlayerQuestParameters) error { - return h.quests.ForceClaim(ctx, PlayerQuestsParameters{ - IdempotencyKey: parameters.IdempotencyKey, - Items: []PlayerQuestRef{{PlayerID: h.playerID, QuestSlug: parameters.QuestSlug}}, - }) -} diff --git a/quests.go b/quests.go deleted file mode 100644 index cb5ec71..0000000 --- a/quests.go +++ /dev/null @@ -1,64 +0,0 @@ -package rudder - -import ( - "context" - "net/http" - "net/url" - "strconv" - - "hub.rudder.build/rudder/rudder-go-sdk/v2/models" -) - -type QuestsService struct { - transport *transport -} - -type ListQuestsParameters struct { - Status *string - Limit int - Cursor *string -} - -func (s *QuestsService) List(ctx context.Context, parameters ListQuestsParameters) (*QuestList, error) { - query := url.Values{} - if parameters.Status != nil { - query.Set("status", *parameters.Status) - } - if parameters.Limit > 0 { - query.Set("limit", strconv.Itoa(parameters.Limit)) - } - if parameters.Cursor != nil { - query.Set("cursor", *parameters.Cursor) - } - - var response QuestList - if err := s.transport.do(ctx, http.MethodGet, "/quests", query, nil, &response); err != nil { - return nil, err - } - return &response, nil -} - -type PlayerQuestsParameters struct { - IdempotencyKey string - Items []PlayerQuestRef -} - -func (s *QuestsService) Reset(ctx context.Context, parameters PlayerQuestsParameters) error { - return s.postPlayerQuests(ctx, "/players/quests/reset", parameters) -} - -func (s *QuestsService) ForceComplete(ctx context.Context, parameters PlayerQuestsParameters) error { - return s.postPlayerQuests(ctx, "/players/quests/force-complete", parameters) -} - -func (s *QuestsService) ForceClaim(ctx context.Context, parameters PlayerQuestsParameters) error { - return s.postPlayerQuests(ctx, "/players/quests/force-claim", parameters) -} - -func (s *QuestsService) postPlayerQuests(ctx context.Context, path string, parameters PlayerQuestsParameters) error { - body := models.BatchPlayerQuestsRequest{ - IdempotencyKey: parameters.IdempotencyKey, - Items: parameters.Items, - } - return s.transport.do(ctx, http.MethodPost, path, nil, body, nil) -} diff --git a/resources.go b/resources.go new file mode 100644 index 0000000..98eb10e --- /dev/null +++ b/resources.go @@ -0,0 +1,55 @@ +package rudder + +import ( + "context" + "fmt" + "net/http" +) + +type ResourcesService struct { + transport *transport +} + +type ResourceBatchItem struct { + PlayerID string `json:"playerId"` + ID string `json:"id,omitempty"` + Data map[string]any `json:"data,omitempty"` + Version int64 `json:"version,omitempty"` +} + +type ResourceRowsPage struct { + Items []any `json:"items"` + Total int `json:"total"` +} + +func (s *ResourcesService) List(ctx context.Context, slug string) (*ResourceRowsPage, error) { + var page ResourceRowsPage + path := fmt.Sprintf("/resources/%s/rows", slug) + if err := s.transport.do(ctx, http.MethodGet, path, nil, nil, &page); err != nil { + return nil, err + } + return &page, nil +} + +func (s *ResourcesService) Create(ctx context.Context, slug string, items []ResourceBatchItem) (*ResourceRowsPage, error) { + var page ResourceRowsPage + path := fmt.Sprintf("/resources/%s/rows", slug) + if err := s.transport.do(ctx, http.MethodPost, path, nil, map[string]any{"items": items}, &page); err != nil { + return nil, err + } + return &page, nil +} + +func (s *ResourcesService) Update(ctx context.Context, slug string, items []ResourceBatchItem) (*ResourceRowsPage, error) { + var page ResourceRowsPage + path := fmt.Sprintf("/resources/%s/rows", slug) + if err := s.transport.do(ctx, http.MethodPatch, path, nil, map[string]any{"items": items}, &page); err != nil { + return nil, err + } + return &page, nil +} + +func (s *ResourcesService) Delete(ctx context.Context, slug string, items []ResourceBatchItem) error { + path := fmt.Sprintf("/resources/%s/rows", slug) + return s.transport.do(ctx, http.MethodDelete, path, nil, map[string]any{"items": items}, nil) +} diff --git a/types.go b/types.go index 661f01d..6305bfb 100644 --- a/types.go +++ b/types.go @@ -17,25 +17,7 @@ type WalletTransaction = models.WalletAudit type WalletHistory = models.GetWalletHistoryResponse type WalletAdjustment = models.BatchAdjustPlayerWalletsItem -type InventoryItem = models.InventoryItem -type InventoryList = models.GetPlayerInventoryResponse -type InventoryAdjustment = models.BatchAdjustPlayerInventoryItemsItem - type PlayerStorage = models.PlayerStorage type ProjectStorage = models.ProjectStorageItem type ProjectStorageList = models.GetProjectStorageResponse type ProjectStorageInput = models.AdminProjectStorageItem - -type PlayerQuest = models.AdminPlayerQuest -type PlayerQuestObjective = models.AdminPlayerQuestObjective -type PlayerQuestRef = models.BatchPlayerQuestsItem -type Quest = models.QuestDefinition -type QuestObjective = models.QuestObjective -type QuestReward = models.QuestRewardDefinition -type QuestList = models.AdminListQuestsResponse - -type Leaderboard = models.LeaderboardDefinition -type LeaderboardList = models.ListLeaderboardsResponse -type LeaderboardScore = models.BatchLeaderboardEntry -type Rank = models.RankEntry -type RankList = models.ListLeaderboardEntriesResponse