From d602a95baf43c4a2bea7fbc65f63105fd398c8c4 Mon Sep 17 00:00:00 2001 From: edmand46 Date: Wed, 12 Aug 2026 23:58:34 +0300 Subject: [PATCH] Add ProjectStorageService (list/get/upsert/delete) --- client.go | 4 ++ models/admingetprojectstorageresponse.go | 7 +++ models/adminprojectstorageitem.go | 11 +++++ models/getprojectstorageresponse.go | 8 ++++ models/projectstorageitem.go | 15 ++++++ models/upsertprojectstoragerequest.go | 7 +++ projectstorage.go | 58 ++++++++++++++++++++++++ 7 files changed, 110 insertions(+) create mode 100644 models/admingetprojectstorageresponse.go create mode 100644 models/adminprojectstorageitem.go create mode 100644 models/getprojectstorageresponse.go create mode 100644 models/projectstorageitem.go create mode 100644 models/upsertprojectstoragerequest.go create mode 100644 projectstorage.go diff --git a/client.go b/client.go index 513928b..3dd4108 100644 --- a/client.go +++ b/client.go @@ -20,6 +20,8 @@ type Client struct { Leaderboards *LeaderboardsService Wallet *WalletService Ugc *UgcService + + ProjectStorage *ProjectStorageService } func New(config Config) (*Client, error) { @@ -49,5 +51,7 @@ func New(config Config) (*Client, error) { Leaderboards: &LeaderboardsService{transport: transport}, Wallet: &WalletService{transport: transport}, Ugc: &UgcService{transport: transport}, + + ProjectStorage: &ProjectStorageService{transport: transport}, }, nil } diff --git a/models/admingetprojectstorageresponse.go b/models/admingetprojectstorageresponse.go new file mode 100644 index 0000000..e5b5502 --- /dev/null +++ b/models/admingetprojectstorageresponse.go @@ -0,0 +1,7 @@ +// Code generated by apigen. DO NOT EDIT. + +package models + +type AdminGetProjectStorageResponse struct { + Item ProjectStorageItem `json:"item,omitempty"` +} diff --git a/models/adminprojectstorageitem.go b/models/adminprojectstorageitem.go new file mode 100644 index 0000000..67cd080 --- /dev/null +++ b/models/adminprojectstorageitem.go @@ -0,0 +1,11 @@ +// Code generated by apigen. DO NOT EDIT. + +package models + +type AdminProjectStorageItem struct { + Data string `json:"data,omitempty"` + ExpiresAt string `json:"expiresAt,omitempty"` + ReadPermission string `json:"readPermission,omitempty"` + Type string `json:"type,omitempty"` + WritePermission string `json:"writePermission,omitempty"` +} diff --git a/models/getprojectstorageresponse.go b/models/getprojectstorageresponse.go new file mode 100644 index 0000000..92a711c --- /dev/null +++ b/models/getprojectstorageresponse.go @@ -0,0 +1,8 @@ +// Code generated by apigen. DO NOT EDIT. + +package models + +type GetProjectStorageResponse struct { + Items []ProjectStorageItem `json:"items,omitempty"` + NextCursor string `json:"nextCursor,omitempty"` +} diff --git a/models/projectstorageitem.go b/models/projectstorageitem.go new file mode 100644 index 0000000..3b0fbd3 --- /dev/null +++ b/models/projectstorageitem.go @@ -0,0 +1,15 @@ +// Code generated by apigen. DO NOT EDIT. + +package models + +type ProjectStorageItem struct { + Data string `json:"data,omitempty"` + ExpiresAt string `json:"expiresAt,omitempty"` + ID string `json:"id,omitempty"` + ReadPermission string `json:"readPermission,omitempty"` + Size int64 `json:"size,omitempty"` + Type string `json:"type,omitempty"` + UpdatedAt string `json:"updatedAt,omitempty"` + Version int64 `json:"version,omitempty"` + WritePermission string `json:"writePermission,omitempty"` +} diff --git a/models/upsertprojectstoragerequest.go b/models/upsertprojectstoragerequest.go new file mode 100644 index 0000000..86e604f --- /dev/null +++ b/models/upsertprojectstoragerequest.go @@ -0,0 +1,7 @@ +// Code generated by apigen. DO NOT EDIT. + +package models + +type UpsertProjectStorageRequest struct { + Items []AdminProjectStorageItem `json:"items,omitempty"` +} diff --git a/projectstorage.go b/projectstorage.go new file mode 100644 index 0000000..c2a0383 --- /dev/null +++ b/projectstorage.go @@ -0,0 +1,58 @@ +package rudder + +import ( + "context" + "net/http" + "net/url" + "strconv" + + "hub.rudder.build/rudder/rudder-go-sdk/models" +) + +type ProjectStorageService struct { + transport *transport +} + +type ListProjectStorageParameters struct { + Limit int + Cursor string +} + +func (s *ProjectStorageService) List(ctx context.Context, parameters ListProjectStorageParameters) (*models.GetProjectStorageResponse, error) { + query := url.Values{} + if parameters.Limit > 0 { + query.Set("limit", strconv.Itoa(parameters.Limit)) + } + if parameters.Cursor != "" { + query.Set("cursor", parameters.Cursor) + } + + var response models.GetProjectStorageResponse + if err := s.transport.do(ctx, http.MethodGet, "/project-storage", query, nil, &response); err != nil { + return nil, err + } + return &response, nil +} + +func (s *ProjectStorageService) Get(ctx context.Context, itemType string) (*models.ProjectStorageItem, error) { + var response models.AdminGetProjectStorageResponse + if err := s.transport.do(ctx, http.MethodGet, "/project-storage/"+url.PathEscape(itemType), nil, nil, &response); err != nil { + return nil, err + } + return &response.Item, nil +} + +type UpsertProjectStorageParameters struct { + Items []models.AdminProjectStorageItem +} + +func (s *ProjectStorageService) Upsert(ctx context.Context, parameters UpsertProjectStorageParameters) error { + body := models.UpsertProjectStorageRequest{ + Items: parameters.Items, + } + return s.transport.do(ctx, http.MethodPut, "/project-storage", nil, body, nil) +} + +func (s *ProjectStorageService) Delete(ctx context.Context, itemType string) error { + return s.transport.do(ctx, http.MethodDelete, "/project-storage/"+url.PathEscape(itemType), nil, nil, nil) +}