diff --git a/LootLockerServerSDK/Source/LootLockerServerSDK/Private/LootLockerServerEndpoints.cpp b/LootLockerServerSDK/Source/LootLockerServerSDK/Private/LootLockerServerEndpoints.cpp index b231dfc..eccf699 100755 --- a/LootLockerServerSDK/Source/LootLockerServerSDK/Private/LootLockerServerEndpoints.cpp +++ b/LootLockerServerSDK/Source/LootLockerServerSDK/Private/LootLockerServerEndpoints.cpp @@ -32,6 +32,7 @@ FLootLockerServerEndPoint ULootLockerServerEndpoints::DeleteLeaderboardSchedule // Assets FLootLockerServerEndPoint ULootLockerServerEndpoints::GetAssets = InitEndpoint("assets", ELootLockerServerHTTPMethod::GET); FLootLockerServerEndPoint ULootLockerServerEndpoints::ListAssets = InitEndpoint("assets/artful-alpaca/v1", ELootLockerServerHTTPMethod::POST); +FLootLockerServerEndPoint ULootLockerServerEndpoints::ListContexts = InitEndpoint("contexts/v1", ELootLockerServerHTTPMethod::GET); // Asset Instances FLootLockerServerEndPoint ULootLockerServerEndpoints::GetAssetInstanceKeyValuePairs = InitEndpoint("player/{0}/assets/instances/{1}/storage", ELootLockerServerHTTPMethod::GET); diff --git a/LootLockerServerSDK/Source/LootLockerServerSDK/Private/LootLockerServerForBlueprints.cpp b/LootLockerServerSDK/Source/LootLockerServerSDK/Private/LootLockerServerForBlueprints.cpp index 92f048d..6805986 100755 --- a/LootLockerServerSDK/Source/LootLockerServerSDK/Private/LootLockerServerForBlueprints.cpp +++ b/LootLockerServerSDK/Source/LootLockerServerSDK/Private/LootLockerServerForBlueprints.cpp @@ -345,6 +345,11 @@ void ULootLockerServerForBlueprints::ListAssetsWithDefaultParameters(const FLoot ListAssets(FLootLockerServerListAssetsRequest(), 0, 0, OnCompletedRequest); } +void ULootLockerServerForBlueprints::ListContexts(int PerPage, int Page, const FLootLockerServerListContextsResponseBP& OnCompletedRequest) +{ + ULootLockerServerAssetRequest::ListContexts(PerPage, Page, OnCompletedRequest); +} + // Asset Instances void ULootLockerServerForBlueprints::GetKeyValuePairsFromAssetInstance(int PlayerID, int AssetInstanceID, const FLootLockerServerAssetInstanceKeyValuePairsListResponseBP& OnCompletedRequest) { diff --git a/LootLockerServerSDK/Source/LootLockerServerSDK/Private/LootLockerServerForCpp.cpp b/LootLockerServerSDK/Source/LootLockerServerSDK/Private/LootLockerServerForCpp.cpp index fbab696..e60ae24 100755 --- a/LootLockerServerSDK/Source/LootLockerServerSDK/Private/LootLockerServerForCpp.cpp +++ b/LootLockerServerSDK/Source/LootLockerServerSDK/Private/LootLockerServerForCpp.cpp @@ -345,6 +345,11 @@ void ULootLockerServerForCpp::ListAssetsWithDefaultParameters(const FLootLockerS ListAssets(FLootLockerServerListAssetsRequest(), 0, 0, OnCompletedRequest); } +void ULootLockerServerForCpp::ListContexts(int PerPage, int Page, const FLootLockerServerListContextsResponseDelegate& OnCompletedRequest) +{ + ULootLockerServerAssetRequest::ListContexts(PerPage, Page, FLootLockerServerListContextsResponseBP(), OnCompletedRequest); +} + // Asset Instances void ULootLockerServerForCpp::GetKeyValuePairsFromAssetInstance(int PlayerID, int AssetInstanceID, const FLootLockerServerAssetInstanceKeyValuePairsListResponseDelegate& OnCompletedRequest) { diff --git a/LootLockerServerSDK/Source/LootLockerServerSDK/Private/ServerAPI/LootLockerServerAssetRequest.cpp b/LootLockerServerSDK/Source/LootLockerServerSDK/Private/ServerAPI/LootLockerServerAssetRequest.cpp index 7a74ebc..da56144 100755 --- a/LootLockerServerSDK/Source/LootLockerServerSDK/Private/ServerAPI/LootLockerServerAssetRequest.cpp +++ b/LootLockerServerSDK/Source/LootLockerServerSDK/Private/ServerAPI/LootLockerServerAssetRequest.cpp @@ -65,3 +65,11 @@ void ULootLockerServerAssetRequest::ListAssets(const FLootLockerServerListAssets ULootLockerServerHttpClient::SendRequest(Request, ULootLockerServerEndpoints::ListAssets, {}, QueryParams, OnCompletedRequestBP, OnCompletedRequest); } +void ULootLockerServerAssetRequest::ListContexts(int PerPage, int Page, const FLootLockerServerListContextsResponseBP& OnCompletedRequestBP, const FLootLockerServerListContextsResponseDelegate& OnCompletedRequest) +{ + TMultiMap QueryParams; + if(Page > 0) QueryParams.Add("page", FString::FromInt(Page)); + if(PerPage > 0) QueryParams.Add("per_page", FString::FromInt(PerPage)); + ULootLockerServerHttpClient::SendRequest(FLootLockerServerEmptyRequest{}, ULootLockerServerEndpoints::ListContexts, {}, QueryParams, OnCompletedRequestBP, OnCompletedRequest); +} + diff --git a/LootLockerServerSDK/Source/LootLockerServerSDK/Public/LootLockerServerEndpoints.h b/LootLockerServerSDK/Source/LootLockerServerSDK/Public/LootLockerServerEndpoints.h index d421293..2f98818 100644 --- a/LootLockerServerSDK/Source/LootLockerServerSDK/Public/LootLockerServerEndpoints.h +++ b/LootLockerServerSDK/Source/LootLockerServerSDK/Public/LootLockerServerEndpoints.h @@ -64,6 +64,7 @@ class LOOTLOCKERSERVERSDK_API ULootLockerServerEndpoints : public UObject // Assets static FLootLockerServerEndPoint GetAssets; static FLootLockerServerEndPoint ListAssets; + static FLootLockerServerEndPoint ListContexts; // Asset Instances static FLootLockerServerEndPoint GetAssetInstanceKeyValuePairs; diff --git a/LootLockerServerSDK/Source/LootLockerServerSDK/Public/LootLockerServerForBlueprints.h b/LootLockerServerSDK/Source/LootLockerServerSDK/Public/LootLockerServerForBlueprints.h index ad2659f..1b7664a 100755 --- a/LootLockerServerSDK/Source/LootLockerServerSDK/Public/LootLockerServerForBlueprints.h +++ b/LootLockerServerSDK/Source/LootLockerServerSDK/Public/LootLockerServerForBlueprints.h @@ -799,6 +799,16 @@ class LOOTLOCKERSERVERSDK_API ULootLockerServerForBlueprints : public UObject UFUNCTION(BlueprintCallable, Category = "LootLockerServer Methods | Assets") static void ListAssetsWithDefaultParameters(const FLootLockerServerListAssetsResponseBP& OnCompletedRequest); + /** + * List contexts with pagination support + * + * @param PerPage Optional: page size (ignored if 0 or negative) + * @param Page Optional: page index (ignored if 0 or negative) + * @param OnCompletedRequest Delegate for handling the server response + */ + UFUNCTION(BlueprintCallable, Category = "LootLockerServer Methods | Assets", meta=(AdvancedDisplay="PerPage,Page", PerPage=-1, Page=-1)) + static void ListContexts(int PerPage, int Page, const FLootLockerServerListContextsResponseBP& OnCompletedRequest); + //================================================== // Asset Instances https://ref.lootlocker.com/server-api/#asset-instances //================================================== diff --git a/LootLockerServerSDK/Source/LootLockerServerSDK/Public/LootLockerServerForCpp.h b/LootLockerServerSDK/Source/LootLockerServerSDK/Public/LootLockerServerForCpp.h index 75b4eeb..c4f2923 100755 --- a/LootLockerServerSDK/Source/LootLockerServerSDK/Public/LootLockerServerForCpp.h +++ b/LootLockerServerSDK/Source/LootLockerServerSDK/Public/LootLockerServerForCpp.h @@ -135,6 +135,15 @@ class LOOTLOCKERSERVERSDK_API ULootLockerServerForCpp : public UObject */ static void ListAssetsWithDefaultParameters(const FLootLockerServerListAssetsResponseDelegate& OnCompletedRequest); + /** + * List contexts with pagination support + * + * @param PerPage Optional: page size (ignored if 0 or negative) + * @param Page Optional: page index (ignored if 0 or negative) + * @param OnCompletedRequest Delegate for handling the server response + */ + static void ListContexts(int PerPage, int Page, const FLootLockerServerListContextsResponseDelegate& OnCompletedRequest); + /** * Update an existing leaderboard with the provided details. * https://ref.lootlocker.com/server-api/#update-leaderboard diff --git a/LootLockerServerSDK/Source/LootLockerServerSDK/Public/ServerAPI/LootLockerServerAssetRequest.h b/LootLockerServerSDK/Source/LootLockerServerSDK/Public/ServerAPI/LootLockerServerAssetRequest.h index 2988cfc..c4ec71a 100644 --- a/LootLockerServerSDK/Source/LootLockerServerSDK/Public/ServerAPI/LootLockerServerAssetRequest.h +++ b/LootLockerServerSDK/Source/LootLockerServerSDK/Public/ServerAPI/LootLockerServerAssetRequest.h @@ -604,6 +604,30 @@ struct FLootLockerServerSimpleAsset TArray metadata; }; +/** + * Represents a context for organizing assets and inventory + */ +USTRUCT(BlueprintType) +struct FLootLockerServerContext +{ + GENERATED_BODY() + /** + * Integer ID of the context + */ + UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLockerServer") + int Id = 0; + /** + * Context UUID + */ + UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLockerServer") + FString Uuid = ""; + /** + * Context Name + */ + UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLockerServer") + FString Name = ""; +}; + //================================================== // Request Definitions //================================================== @@ -734,6 +758,25 @@ struct FLootLockerServerListAssetsResponse : public FLootLockerServerResponse FLootLockerServerExtendedIndexBasedPagination pagination; }; +/** + * Response payload for listing contexts + */ +USTRUCT(BlueprintType) +struct FLootLockerServerListContextsResponse : public FLootLockerServerResponse +{ + GENERATED_BODY() + /* + List of contexts returned for this request + */ + UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLockerServer") + TArray Contexts; + /* + Pagination information for the returned context list + */ + UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLockerServer") + FLootLockerServerExtendedIndexBasedPagination Pagination; +}; + //================================================== // Blueprint Delegate Definitions //================================================== @@ -754,6 +797,10 @@ DECLARE_DYNAMIC_DELEGATE_OneParam(FLootLockerServerAssetInstanceKeyValuePairItem Blueprint response delegate for listing simple assets */ DECLARE_DYNAMIC_DELEGATE_OneParam(FLootLockerServerListAssetsResponseBP, FLootLockerServerListAssetsResponse, Response); +/* + Blueprint response delegate for listing contexts + */ +DECLARE_DYNAMIC_DELEGATE_OneParam(FLootLockerServerListContextsResponseBP, FLootLockerServerListContextsResponse, Response); //================================================== // C++ Delegate Definitions @@ -775,6 +822,10 @@ DECLARE_DELEGATE_OneParam(FLootLockerServerAssetInstanceKeyValuePairItemResponse Blueprint response delegate for listing simple assets */ DECLARE_DELEGATE_OneParam(FLootLockerServerListAssetsResponseDelegate, FLootLockerServerListAssetsResponse); +/* + C++ response delegate for listing contexts + */ +DECLARE_DELEGATE_OneParam(FLootLockerServerListContextsResponseDelegate, FLootLockerServerListContextsResponse); /** * @@ -795,4 +846,5 @@ class LOOTLOCKERSERVERSDK_API ULootLockerServerAssetRequest : public UObject static void UpdateKeyValuePairOnAssetInstanceById(int PlayerID, int AssetInstanceID, int KeyValuePairID, const FString Key, FString Value, const FLootLockerServerAssetInstanceKeyValuePairItemResponseBP& OnCompletedRequestBP = FLootLockerServerAssetInstanceKeyValuePairItemResponseBP(), const FLootLockerServerAssetInstanceKeyValuePairItemResponseDelegate& OnCompletedRequest = FLootLockerServerAssetInstanceKeyValuePairItemResponseDelegate()); static void DeleteKeyValuePairFromAssetInstanceById(int PlayerID, int AssetInstanceID, int KeyValuePairID, const FLootLockerServerAssetInstanceKeyValuePairsListResponseBP& OnCompletedRequestBP = FLootLockerServerAssetInstanceKeyValuePairsListResponseBP(), const FLootLockerServerAssetInstanceKeyValuePairsListResponseDelegate& OnCompletedRequest = FLootLockerServerAssetInstanceKeyValuePairsListResponseDelegate()); static void ListAssets(const FLootLockerServerListAssetsRequest& Request, int PerPage = 0, int Page = 0, const FLootLockerServerListAssetsResponseBP& OnCompletedRequestBP = FLootLockerServerListAssetsResponseBP(), const FLootLockerServerListAssetsResponseDelegate& OnCompletedRequest = FLootLockerServerListAssetsResponseDelegate()); + static void ListContexts(int PerPage = 0, int Page = 0, const FLootLockerServerListContextsResponseBP& OnCompletedRequestBP = FLootLockerServerListContextsResponseBP(), const FLootLockerServerListContextsResponseDelegate& OnCompletedRequest = FLootLockerServerListContextsResponseDelegate()); };