65 lines
2.2 KiB
C++

// ©2022 Batty Bovine Productions, LLC. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "API/BugzillaJSONStructs.h"
#include "API/UnrealzillaBugDataStructs.h"
#include "Interfaces/IHttpRequest.h"
#include "Interfaces/IHttpResponse.h"
#include "ServerAPI.generated.h"
/**
* Class for communicating with REST API on bug tracking software
*/
UCLASS()
class UNREALZILLA_API UServerAPI : public UObject
{
GENERATED_BODY()
public:
virtual void Initialize() {}
virtual void ReturnListOfBugs();
virtual void PrepareForm();
virtual void SendFormData(const FUnrealzillaPostData &PostData);
TArray<FString> GetComponentsList() const { return this->ComponentsList; }
TArray<FString> GetSeverityList() const { return this->SeverityList; }
TArray<FString> GetVersionsList() const { return this->VersionsList; }
TArray<FString> GetPlatformsList() const { return this->PlatformsList; }
TArray<FString> GetOSList() const { return this->OSList; }
DECLARE_DELEGATE_OneParam(FBugListResponseDelegate, const TArray<FUnrealzillaBugData>&);
DECLARE_DELEGATE_OneParam(FFormResponseDelegate, const FUnrealzillaFormPrepData&);
DECLARE_DELEGATE_OneParam(FServerErrorResponseDelegate, const FUnrealzillaErrorData &);
FBugListResponseDelegate BugDataResponse;
FFormResponseDelegate FormDataResponse;
FServerErrorResponseDelegate ErrorResponse;
protected:
void ServerConnectionError(const EHttpRequestStatus::Type Status);
void CreateError(const EErrorVerb &Verb, const FBugzillaJSONPostResponse &Data);
void CreateError(const EErrorVerb &Verb, const FBugzillaJSONProductResponse &Data);
void CreateError(const EErrorVerb &Verb, const FBugzillaJSONFieldResponse &Data);
void CreateError(const EErrorVerb &Verb, const FBugzillaJSONBugResponse &Data);
void CreateError(const FString &ErrorMessage, const bool bCancelForm = false);
static const FString URLBuilder(const FString &Server, const FString &Path);
static const FString FormatQueryString(const TMap<FString, FString> &QueryData);
static const FString GetGameVersion();
TArray<FString> ComponentsList;
TArray<FString> SeverityList;
TArray<FString> VersionsList;
TArray<FString> PlatformsList;
TArray<FString> OSList;
FString FullURL;
};