diff --git a/src/Prospect.Server.Api/Controllers/ClientController.cs b/src/Prospect.Server.Api/Controllers/ClientController.cs index 4d5654f..664af2d 100644 --- a/src/Prospect.Server.Api/Controllers/ClientController.cs +++ b/src/Prospect.Server.Api/Controllers/ClientController.cs @@ -1,4 +1,5 @@ -using Microsoft.AspNetCore.Authorization; +using System.Net.Mime; +using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; using Prospect.Server.Api.Config; @@ -45,8 +46,8 @@ public class ClientController : Controller [AllowAnonymous] [HttpPost("LoginWithSteam")] - [Produces("application/json")] - public async Task LoginWithSteam(ClientLoginWithSteamRequest request) + [Produces(MediaTypeNames.Application.Json)] + public async Task LoginWithSteam(FLoginWithSteamRequest request) { if (!string.IsNullOrEmpty(request.SteamTicket)) { @@ -125,7 +126,7 @@ public class ClientController : Controller } [HttpPost("AddGenericID")] - [Produces("application/json")] + [Produces(MediaTypeNames.Application.Json)] [Authorize(AuthenticationSchemes = UserAuthenticationOptions.DefaultScheme)] public IActionResult AddGenericId(FAddGenericIDRequest request) { @@ -138,7 +139,7 @@ public class ClientController : Controller } [HttpPost("UpdateUserTitleDisplayName")] - [Produces("application/json")] + [Produces(MediaTypeNames.Application.Json)] [Authorize(AuthenticationSchemes = UserAuthenticationOptions.DefaultScheme)] public IActionResult UpdateUserTitleDisplayName(FUpdateUserTitleDisplayNameRequest request) { @@ -154,7 +155,7 @@ public class ClientController : Controller } [HttpPost("UpdateUserData")] - [Produces("application/json")] + [Produces(MediaTypeNames.Application.Json)] [Authorize(AuthenticationSchemes = UserAuthenticationOptions.DefaultScheme)] public async Task UpdateUserData(FUpdateUserDataRequest request) { @@ -173,7 +174,7 @@ public class ClientController : Controller } [HttpPost("GetUserData")] - [Produces("application/json")] + [Produces(MediaTypeNames.Application.Json)] [Authorize(AuthenticationSchemes = UserAuthenticationOptions.DefaultScheme)] public async Task GetUserData(FGetUserDataRequest request) { @@ -193,7 +194,7 @@ public class ClientController : Controller } [HttpPost("GetUserReadOnlyData")] - [Produces("application/json")] + [Produces(MediaTypeNames.Application.Json)] [Authorize(AuthenticationSchemes = UserAuthenticationOptions.DefaultScheme)] public IActionResult GetUserReadOnlyData(FGetUserDataRequest request) { @@ -210,7 +211,7 @@ public class ClientController : Controller } [HttpPost("GetUserInventory")] - [Produces("application/json")] + [Produces(MediaTypeNames.Application.Json)] [Authorize(AuthenticationSchemes = UserAuthenticationOptions.DefaultScheme)] public IActionResult GetUserReadOnlyData(FGetUserInventoryRequest request) { @@ -252,7 +253,7 @@ public class ClientController : Controller } [HttpPost("GetTitleData")] - [Produces("application/json")] + [Produces(MediaTypeNames.Application.Json)] [Authorize(AuthenticationSchemes = UserAuthenticationOptions.DefaultScheme)] public IActionResult GetTitleData(FGetTitleDataRequest request) { diff --git a/src/Prospect.Server.Api/Controllers/CloudScriptController.cs b/src/Prospect.Server.Api/Controllers/CloudScriptController.cs index a92ce4a..6d51c86 100644 --- a/src/Prospect.Server.Api/Controllers/CloudScriptController.cs +++ b/src/Prospect.Server.Api/Controllers/CloudScriptController.cs @@ -1,4 +1,5 @@ -using Microsoft.AspNetCore.Authorization; +using System.Net.Mime; +using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Prospect.Server.Api.Models.Client; using Prospect.Server.Api.Models.CloudScript; @@ -21,7 +22,7 @@ public class CloudScriptController : Controller } [HttpPost("ExecuteFunction")] - [Produces("application/json")] + [Produces(MediaTypeNames.Application.Json)] public IActionResult ExecuteFunction(FExecuteFunctionRequest request) { _logger.LogInformation("Executing function {Function}", request.FunctionName); diff --git a/src/Prospect.Server.Api/Controllers/MultiplayerController.cs b/src/Prospect.Server.Api/Controllers/MultiplayerController.cs new file mode 100644 index 0000000..cc5a97d --- /dev/null +++ b/src/Prospect.Server.Api/Controllers/MultiplayerController.cs @@ -0,0 +1,47 @@ +using System.Net.Mime; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Prospect.Server.Api.Models.Client; +using Prospect.Server.Api.Models.Multiplayer; +using Prospect.Server.Api.Models.Multiplayer.Data; +using Prospect.Server.Api.Services.Auth.Entity; +using Prospect.Server.Api.Services.Auth.User; + +namespace Prospect.Server.Api.Controllers; + +[Route("MultiplayerServer")] +[ApiController] +[Authorize(AuthenticationSchemes = EntityAuthenticationOptions.DefaultScheme)] +public class MultiplayerController : Controller +{ + private readonly ILogger _logger; + + public MultiplayerController(ILogger logger) + { + _logger = logger; + } + + [HttpPost("ListQosServersForTitle")] + [Produces(MediaTypeNames.Application.Json)] + [Authorize(AuthenticationSchemes = UserAuthenticationOptions.DefaultScheme)] + public IActionResult ListQosServersForTitle(FListQosServersForTitleRequest request) + { + return Ok(new ClientResponse + { + Code = 200, + Status = "OK", + Data = new FListQosServersForTitleResponse + { + PageSize = 1, + QosServers = new List + { + new FQosServer + { + Region = "NorthEurope", + ServerUrl = "127.0.0.1" + } + } + } + }); + } +} \ No newline at end of file diff --git a/src/Prospect.Server.Api/Models/Client/ClientLoginWithSteamRequest.cs b/src/Prospect.Server.Api/Models/Client/ClientLoginWithSteamRequest.cs deleted file mode 100644 index cc9424b..0000000 --- a/src/Prospect.Server.Api/Models/Client/ClientLoginWithSteamRequest.cs +++ /dev/null @@ -1,58 +0,0 @@ -using System.Text.Json; -using System.Text.Json.Serialization; - -namespace Prospect.Server.Api.Models.Client; - -public class ClientLoginWithSteamRequest -{ - [JsonPropertyName("CreateAccount")] - public bool CreateAccount { get; set; } - - [JsonPropertyName("CustomTags")] - public JsonDocument CustomTags { get; set; } - - [JsonPropertyName("EncryptedRequest")] - public string EncryptedRequest { get; set; } - - [JsonPropertyName("InfoRequestParameters")] - public InfoParameters InfoRequestParameters { get; set; } - - [JsonPropertyName("PlayerSecret")] - public string PlayerSecret { get; set; } - - [JsonPropertyName("SteamTicket")] - public string SteamTicket { get; set; } -} - -public class InfoParameters -{ - [JsonPropertyName("GetCharacterInventories")] - public bool GetCharacterInventories { get; set; } - - [JsonPropertyName("GetCharacterList")] - public bool GetCharacterList { get; set; } - - [JsonPropertyName("GetPlayerProfile")] - public bool GetPlayerProfile { get; set; } - - [JsonPropertyName("GetPlayerStatistics")] - public bool GetPlayerStatistics { get; set; } - - [JsonPropertyName("GetTitleData")] - public bool GetTitleData { get; set; } - - [JsonPropertyName("GetUserAccountInfo")] - public bool GetUserAccountInfo { get; set; } - - [JsonPropertyName("GetUserData")] - public bool GetUserData { get; set; } - - [JsonPropertyName("GetUserInventory")] - public bool GetUserInventory { get; set; } - - [JsonPropertyName("GetUserReadOnlyData")] - public bool GetUserReadOnlyData { get; set; } - - [JsonPropertyName("GetUserVirtualCurrency")] - public bool GetUserVirtualCurrency { get; set; } -} \ No newline at end of file diff --git a/src/Prospect.Server.Api/Models/Client/Data/FEntityKey.cs b/src/Prospect.Server.Api/Models/Client/Data/FEntityKey.cs index 132149d..9c59ce9 100644 --- a/src/Prospect.Server.Api/Models/Client/Data/FEntityKey.cs +++ b/src/Prospect.Server.Api/Models/Client/Data/FEntityKey.cs @@ -8,15 +8,15 @@ public class FEntityKey /// Unique ID of the entity. /// [JsonPropertyName("Id")] - public string Id { get; set; } + public string Id { get; set; } = null!; /// /// [optional] Entity type. See https://docs.microsoft.com/gaming/playfab/features/data/entities/available-built-in-entity-types /// [JsonPropertyName("Type")] - public string Type { get; set; } + public string? Type { get; set; } // Not in PlayFab SDK - [JsonPropertyName("TypeString")] - public string TypeString { get; set; } + [JsonPropertyName("TypeString")] + public string TypeString { get; set; } = null!; } \ No newline at end of file diff --git a/src/Prospect.Server.Api/Models/Client/Data/FEntityTokenResponse.cs b/src/Prospect.Server.Api/Models/Client/Data/FEntityTokenResponse.cs index 65ee1b7..36fc135 100644 --- a/src/Prospect.Server.Api/Models/Client/Data/FEntityTokenResponse.cs +++ b/src/Prospect.Server.Api/Models/Client/Data/FEntityTokenResponse.cs @@ -9,14 +9,14 @@ public class FEntityTokenResponse /// [JsonPropertyName("Entity")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public FEntityKey Entity { get; set; } + public FEntityKey? Entity { get; set; } /// /// [optional] The token used to set X-EntityToken for all entity based API calls. /// [JsonPropertyName("EntityToken")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public string EntityToken { get; set; } + public string? EntityToken { get; set; } /// /// [optional] The time the token will expire, if it is an expiring token, in UTC. diff --git a/src/Prospect.Server.Api/Models/Client/Data/FFunctionExecutionError.cs b/src/Prospect.Server.Api/Models/Client/Data/FFunctionExecutionError.cs index 0e4aed7..30ce3cd 100644 --- a/src/Prospect.Server.Api/Models/Client/Data/FFunctionExecutionError.cs +++ b/src/Prospect.Server.Api/Models/Client/Data/FFunctionExecutionError.cs @@ -10,19 +10,19 @@ public class FFunctionExecutionError /// [JsonPropertyName("Error")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public string Error { get; set; } + public string? Error { get; set; } /// /// [optional] Details about the error /// [JsonPropertyName("Message")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public string Message { get; set; } + public string? Message { get; set; } /// /// [optional] Point during the execution of the function at which the error occurred, if any /// [JsonPropertyName("StackTrace")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public string StackTrace { get; set; } + public string? StackTrace { get; set; } } \ No newline at end of file diff --git a/src/Prospect.Server.Api/Models/Client/Data/FGenericServiceId.cs b/src/Prospect.Server.Api/Models/Client/Data/FGenericServiceId.cs index 994672e..bd61808 100644 --- a/src/Prospect.Server.Api/Models/Client/Data/FGenericServiceId.cs +++ b/src/Prospect.Server.Api/Models/Client/Data/FGenericServiceId.cs @@ -8,11 +8,11 @@ public class FGenericServiceId /// Name of the service for which the player has a unique identifier. /// [JsonPropertyName("ServiceName")] - public string ServiceName { get; set; } + public string ServiceName { get; set; } = null!; /// /// Unique identifier of the player in that service. /// [JsonPropertyName("UserId")] - public string UserId { get; set; } + public string UserId { get; set; } = null!; } \ No newline at end of file diff --git a/src/Prospect.Server.Api/Models/Client/Data/FGetPlayerCombinedInfoRequestParams.cs b/src/Prospect.Server.Api/Models/Client/Data/FGetPlayerCombinedInfoRequestParams.cs new file mode 100644 index 0000000..fefc685 --- /dev/null +++ b/src/Prospect.Server.Api/Models/Client/Data/FGetPlayerCombinedInfoRequestParams.cs @@ -0,0 +1,66 @@ +using System.Text.Json.Serialization; + +namespace Prospect.Server.Api.Models.Client.Data; + +public class FGetPlayerCombinedInfoRequestParams +{ + /// + /// Whether to get character inventories. Defaults to false. + /// + [JsonPropertyName("GetCharacterInventories")] + public bool GetCharacterInventories { get; set; } + + /// + /// Whether to get the list of characters. Defaults to false. + /// + [JsonPropertyName("GetCharacterList")] + public bool GetCharacterList { get; set; } + + /// + /// Whether to get player profile. Defaults to false. Has no effect for a new player. + /// + [JsonPropertyName("GetPlayerProfile")] + public bool GetPlayerProfile { get; set; } + + /// + /// Whether to get player statistics. Defaults to false. + /// + [JsonPropertyName("GetPlayerStatistics")] + public bool GetPlayerStatistics { get; set; } + + /// + /// Whether to get title data. Defaults to false. + /// + [JsonPropertyName("GetTitleData")] + public bool GetTitleData { get; set; } + + /// + /// Whether to get the player's account Info. Defaults to false + /// + [JsonPropertyName("GetUserAccountInfo")] + public bool GetUserAccountInfo { get; set; } + + /// + /// Whether to get the player's custom data. Defaults to false + /// + [JsonPropertyName("GetUserData")] + public bool GetUserData { get; set; } + + /// + /// Whether to get the player's inventory. Defaults to false + /// + [JsonPropertyName("GetUserInventory")] + public bool GetUserInventory { get; set; } + + /// + /// Whether to get the player's read only data. Defaults to false + /// + [JsonPropertyName("GetUserReadOnlyData")] + public bool GetUserReadOnlyData { get; set; } + + /// + /// Whether to get the player's virtual currency balances. Defaults to false + /// + [JsonPropertyName("GetUserVirtualCurrency")] + public bool GetUserVirtualCurrency { get; set; } +} \ No newline at end of file diff --git a/src/Prospect.Server.Api/Models/Client/Data/FGetPlayerCombinedInfoResultPayload.cs b/src/Prospect.Server.Api/Models/Client/Data/FGetPlayerCombinedInfoResultPayload.cs index e7e8b39..9333abc 100644 --- a/src/Prospect.Server.Api/Models/Client/Data/FGetPlayerCombinedInfoResultPayload.cs +++ b/src/Prospect.Server.Api/Models/Client/Data/FGetPlayerCombinedInfoResultPayload.cs @@ -11,7 +11,7 @@ public class FGetPlayerCombinedInfoResultPayload /// [JsonPropertyName("CharacterInventories")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public List CharacterInventories { get; set; } + public List? CharacterInventories { get; set; } // TArray CharacterList; @@ -21,7 +21,7 @@ public class FGetPlayerCombinedInfoResultPayload /// [JsonPropertyName("PlayerProfile")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public FPlayerProfileModel PlayerProfile { get; set; } + public FPlayerProfileModel? PlayerProfile { get; set; } // TArray PlayerStatistics; @@ -41,7 +41,7 @@ public class FGetPlayerCombinedInfoResultPayload /// [JsonPropertyName("UserInventory")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public List UserInventory { get; set; } + public List? UserInventory { get; set; } // TMap UserReadOnlyData; diff --git a/src/Prospect.Server.Api/Models/Client/Data/FItemInstance.cs b/src/Prospect.Server.Api/Models/Client/Data/FItemInstance.cs index bb8371b..5b48e70 100644 --- a/src/Prospect.Server.Api/Models/Client/Data/FItemInstance.cs +++ b/src/Prospect.Server.Api/Models/Client/Data/FItemInstance.cs @@ -9,14 +9,14 @@ public class FItemInstance /// [JsonPropertyName("Annotation")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public string Annotation { get; set; } + public string? Annotation { get; set; } /// /// [optional] Array of unique items that were awarded when this catalog item was purchased. /// [JsonPropertyName("BundleContents")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public List BundleContents { get; set; } + public List? BundleContents { get; set; } /// /// [optional] Unique identifier for the parent inventory item, as defined in the catalog, for object which were added from a bundle or @@ -24,14 +24,14 @@ public class FItemInstance /// [JsonPropertyName("BundleParent")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public string BundleParent { get; set; } + public string? BundleParent { get; set; } /// /// [optional] Catalog version for the inventory item, when this instance was created. /// [JsonPropertyName("CatalogVersion")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public string CatalogVersion { get; set; } + public string? CatalogVersion { get; set; } /// /// [optional] A set of custom key-value pairs on the instance of the inventory item, which is not to be confused with the catalog @@ -39,14 +39,14 @@ public class FItemInstance /// [JsonPropertyName("CustomData")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public Dictionary CustomData { get; set; } + public Dictionary? CustomData { get; set; } /// /// [optional] CatalogItem.DisplayName at the time this item was purchased. /// [JsonPropertyName("DisplayName")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public string DisplayName { get; set; } + public string? DisplayName { get; set; } /// /// [optional] Timestamp for when this instance will expire. @@ -60,21 +60,21 @@ public class FItemInstance /// [JsonPropertyName("ItemClass")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public string ItemClass { get; set; } + public string? ItemClass { get; set; } /// /// [optional] Unique identifier for the inventory item, as defined in the catalog. /// [JsonPropertyName("ItemId")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public string ItemId { get; set; } + public string? ItemId { get; set; } /// /// [optional] Unique item identifier for this specific instance of the item. /// [JsonPropertyName("ItemInstanceId")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public string ItemInstanceId { get; set; } + public string? ItemInstanceId { get; set; } /// /// [optional] Timestamp for when this instance was purchased. @@ -95,7 +95,7 @@ public class FItemInstance /// [JsonPropertyName("UnitCurrency")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public string UnitCurrency { get; set; } + public string? UnitCurrency { get; set; } /// /// Cost of the catalog item in the given currency. Not available when granting items. diff --git a/src/Prospect.Server.Api/Models/Client/Data/FLogStatement.cs b/src/Prospect.Server.Api/Models/Client/Data/FLogStatement.cs index ef4306b..fd918c0 100644 --- a/src/Prospect.Server.Api/Models/Client/Data/FLogStatement.cs +++ b/src/Prospect.Server.Api/Models/Client/Data/FLogStatement.cs @@ -9,19 +9,19 @@ public class FLogStatement /// [JsonPropertyName("Data")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public object Data { get; set; } + public object? Data { get; set; } /// /// [optional] 'Debug', 'Info', or 'Error' /// [JsonPropertyName("Level")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public string Level { get; set; } + public string? Level { get; set; } /// /// [optional] undefined /// [JsonPropertyName("Message")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public string Message { get; set; } + public string? Message { get; set; } } \ No newline at end of file diff --git a/src/Prospect.Server.Api/Models/Client/Data/FPlayerProfileModel.cs b/src/Prospect.Server.Api/Models/Client/Data/FPlayerProfileModel.cs index fa835c6..f7911e8 100644 --- a/src/Prospect.Server.Api/Models/Client/Data/FPlayerProfileModel.cs +++ b/src/Prospect.Server.Api/Models/Client/Data/FPlayerProfileModel.cs @@ -9,26 +9,26 @@ public class FPlayerProfileModel /// [JsonPropertyName("DisplayName")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public string DisplayName { get; set; } + public string? DisplayName { get; set; } /// /// [optional] PlayFab player account unique identifier /// [JsonPropertyName("PlayerId")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public string PlayerId { get; set; } + public string? PlayerId { get; set; } /// /// [optional] Publisher this player belongs to /// [JsonPropertyName("PublisherId")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public string PublisherId { get; set; } + public string? PublisherId { get; set; } /// /// [optional] Title ID this player profile applies to /// [JsonPropertyName("TitleId")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public string TitleId { get; set; } + public string? TitleId { get; set; } } \ No newline at end of file diff --git a/src/Prospect.Server.Api/Models/Client/Data/FScriptExecutionError.cs b/src/Prospect.Server.Api/Models/Client/Data/FScriptExecutionError.cs index 22afdfc..5016b02 100644 --- a/src/Prospect.Server.Api/Models/Client/Data/FScriptExecutionError.cs +++ b/src/Prospect.Server.Api/Models/Client/Data/FScriptExecutionError.cs @@ -10,19 +10,19 @@ public class FScriptExecutionError /// [JsonPropertyName("Error")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public string Error { get; set; } + public string? Error { get; set; } /// /// [optional] Details about the error /// [JsonPropertyName("Message")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public string Message { get; set; } + public string? Message { get; set; } /// /// [optional] Point during the execution of the script at which the error occurred, if any /// [JsonPropertyName("StackTrace")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public string StackTrace { get; set; } + public string? StackTrace { get; set; } } \ No newline at end of file diff --git a/src/Prospect.Server.Api/Models/Client/Data/FTreatmentAssignment.cs b/src/Prospect.Server.Api/Models/Client/Data/FTreatmentAssignment.cs index 3823e5e..8690a6f 100644 --- a/src/Prospect.Server.Api/Models/Client/Data/FTreatmentAssignment.cs +++ b/src/Prospect.Server.Api/Models/Client/Data/FTreatmentAssignment.cs @@ -9,12 +9,12 @@ public class FTreatmentAssignment /// [JsonPropertyName("Variables")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public List Variables { get; set; } + public List? Variables { get; set; } /// /// [optional] List of the experiment variants. /// [JsonPropertyName("Variants")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public List Variants { get; set; } + public List? Variants { get; set; } } \ No newline at end of file diff --git a/src/Prospect.Server.Api/Models/Client/Data/FUserDataRecord.cs b/src/Prospect.Server.Api/Models/Client/Data/FUserDataRecord.cs index 3ea8225..7f6487f 100644 --- a/src/Prospect.Server.Api/Models/Client/Data/FUserDataRecord.cs +++ b/src/Prospect.Server.Api/Models/Client/Data/FUserDataRecord.cs @@ -16,12 +16,12 @@ public class FUserDataRecord /// [JsonPropertyName("Permission")] [JsonConverter(typeof(JsonStringEnumConverter))] - public UserDataPermission Permission { get; set; } + public UserDataPermission? Permission { get; set; } /// /// [optional] Data stored for the specified user data key. /// [JsonPropertyName("Value")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public string Value { get; set; } + public string? Value { get; set; } } \ No newline at end of file diff --git a/src/Prospect.Server.Api/Models/Client/Data/FVariable.cs b/src/Prospect.Server.Api/Models/Client/Data/FVariable.cs index abbb384..7c790fe 100644 --- a/src/Prospect.Server.Api/Models/Client/Data/FVariable.cs +++ b/src/Prospect.Server.Api/Models/Client/Data/FVariable.cs @@ -8,12 +8,12 @@ public class FVariable /// Name of the variable. /// [JsonPropertyName("Name")] - public string Name { get; set; } + public string Name { get; set; } = null!; /// /// [optional] Value of the variable. /// [JsonPropertyName("Value")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public string Value { get; set; } + public string? Value { get; set; } } \ No newline at end of file diff --git a/src/Prospect.Server.Api/Models/Client/FAddGenericIDRequest.cs b/src/Prospect.Server.Api/Models/Client/FAddGenericIDRequest.cs index e3046ff..5df4465 100644 --- a/src/Prospect.Server.Api/Models/Client/FAddGenericIDRequest.cs +++ b/src/Prospect.Server.Api/Models/Client/FAddGenericIDRequest.cs @@ -5,6 +5,9 @@ namespace Prospect.Server.Api.Models.Client; public class FAddGenericIDRequest { + /// + /// Generic service identifier to add to the player account. + /// [JsonPropertyName("GenericId")] - public FGenericServiceId GenericId { get; set; } + public FGenericServiceId GenericId { get; set; } = null!; } \ No newline at end of file diff --git a/src/Prospect.Server.Api/Models/Client/FExecuteCloudScriptResult.cs b/src/Prospect.Server.Api/Models/Client/FExecuteCloudScriptResult.cs index c0b7fd0..385a62a 100644 --- a/src/Prospect.Server.Api/Models/Client/FExecuteCloudScriptResult.cs +++ b/src/Prospect.Server.Api/Models/Client/FExecuteCloudScriptResult.cs @@ -16,7 +16,7 @@ public class FExecuteCloudScriptResult /// [JsonPropertyName("Error")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public FScriptExecutionError Error { get; set; } + public FScriptExecutionError? Error { get; set; } [JsonPropertyName("ExecutionTimeSeconds")] public double? ExecutionTimeSeconds { get; set; } @@ -26,14 +26,14 @@ public class FExecuteCloudScriptResult /// [JsonPropertyName("FunctionName")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public string FunctionName { get; set; } + public string? FunctionName { get; set; } /// /// [optional] The object returned from the CloudScript function, if any /// [JsonPropertyName("FunctionResult")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public object FunctionResult { get; set; } + public object? FunctionResult { get; set; } /// /// [optional] Flag indicating if the FunctionResult was too large and was subsequently dropped from this event. This only occurs if @@ -55,7 +55,7 @@ public class FExecuteCloudScriptResult /// [JsonPropertyName("Logs")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public List Logs { get; set; } + public List? Logs { get; set; } /// /// [optional] Flag indicating if the logs were too large and were subsequently dropped from this event. This only occurs if the total diff --git a/src/Prospect.Server.Api/Models/Client/FExecuteCloudScriptServerRequest.cs b/src/Prospect.Server.Api/Models/Client/FExecuteCloudScriptServerRequest.cs index eab768c..8124186 100644 --- a/src/Prospect.Server.Api/Models/Client/FExecuteCloudScriptServerRequest.cs +++ b/src/Prospect.Server.Api/Models/Client/FExecuteCloudScriptServerRequest.cs @@ -10,20 +10,20 @@ public class FExecuteCloudScriptServerRequest /// [JsonPropertyName("CustomTags")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public Dictionary CustomTags { get; set; } + public Dictionary? CustomTags { get; set; } /// /// The name of the CloudScript function to execute /// [JsonPropertyName("FunctionName")] - public string FunctionName { get; set; } + public string FunctionName { get; set; } = null!; /// /// [optional] Object that is passed in to the function as the first argument /// [JsonPropertyName("FunctionParameter")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public string FunctionParameter { get; set; } + public string? FunctionParameter { get; set; } /// /// [optional] Generate a 'player_executed_cloudscript' PlayStream event containing the results of the function execution and other @@ -32,12 +32,12 @@ public class FExecuteCloudScriptServerRequest [JsonPropertyName("GeneratePlayStreamEvent")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] public bool? GeneratePlayStreamEvent { get; set; } - + /// /// The unique user identifier for the player on whose behalf the script is being run /// [JsonPropertyName("PlayFabId")] - public string PlayFabId { get; set; } + public string PlayFabId { get; set; } = null!; /// /// [optional] Option for which revision of the CloudScript to execute. 'Latest' executes the most recently created revision, 'Live' diff --git a/src/Prospect.Server.Api/Models/Client/FExecuteFunctionRequest.cs b/src/Prospect.Server.Api/Models/Client/FExecuteFunctionRequest.cs index 35117b6..cb762d7 100644 --- a/src/Prospect.Server.Api/Models/Client/FExecuteFunctionRequest.cs +++ b/src/Prospect.Server.Api/Models/Client/FExecuteFunctionRequest.cs @@ -10,27 +10,27 @@ public class FExecuteFunctionRequest /// [JsonPropertyName("CustomTags")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public Dictionary CustomTags { get; set; } + public Dictionary? CustomTags { get; set; } /// /// [optional] The entity to perform this action on. /// [JsonPropertyName("Entity")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public FEntityKey Entity { get; set; } + public FEntityKey? Entity { get; set; } /// /// The name of the CloudScript function to execute /// [JsonPropertyName("FunctionName")] - public string FunctionName { get; set; } + public string? FunctionName { get; set; } /// /// [optional] Object that is passed in to the function as the FunctionArgument field of the FunctionExecutionContext data structure /// [JsonPropertyName("FunctionParameter")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public string FunctionParameter { get; set; } + public string? FunctionParameter { get; set; } /// /// [optional] Generate a 'entity_executed_cloudscript_function' PlayStream event containing the results of the function execution and diff --git a/src/Prospect.Server.Api/Models/Client/FExecuteFunctionResult.cs b/src/Prospect.Server.Api/Models/Client/FExecuteFunctionResult.cs index 24255a0..c967174 100644 --- a/src/Prospect.Server.Api/Models/Client/FExecuteFunctionResult.cs +++ b/src/Prospect.Server.Api/Models/Client/FExecuteFunctionResult.cs @@ -10,8 +10,8 @@ public class FExecuteFunctionResult /// [JsonPropertyName("Error")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public FFunctionExecutionError Error { get; set; } - + public FFunctionExecutionError? Error { get; set; } + /// /// The amount of time the function took to execute /// @@ -22,14 +22,14 @@ public class FExecuteFunctionResult /// [optional] The name of the function that executed /// [JsonPropertyName("FunctionName")] - public string FunctionName { get; set; } + public string? FunctionName { get; set; } /// /// [optional] The object returned from the function, if any /// [JsonPropertyName("FunctionResult")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public object FunctionResult { get; set; } + public object? FunctionResult { get; set; } /// /// [optional] Flag indicating if the FunctionResult was too large and was subsequently dropped from this event. diff --git a/src/Prospect.Server.Api/Models/Client/FGetTitleDataRequest.cs b/src/Prospect.Server.Api/Models/Client/FGetTitleDataRequest.cs index 8215c45..1325704 100644 --- a/src/Prospect.Server.Api/Models/Client/FGetTitleDataRequest.cs +++ b/src/Prospect.Server.Api/Models/Client/FGetTitleDataRequest.cs @@ -8,12 +8,12 @@ public class FGetTitleDataRequest /// [optional] Specific keys to search for in the title data (leave null to get all keys) /// [JsonPropertyName("Keys")] - public List Keys { get; set; } + public List? Keys { get; set; } /// /// [optional] Name of the override. This value is ignored when used by the game client; otherwise, the overrides are applied /// automatically to the title data. /// [JsonPropertyName("OverrideLabel")] - public string OverrideLabel { get; set; } + public string? OverrideLabel { get; set; } } \ No newline at end of file diff --git a/src/Prospect.Server.Api/Models/Client/FGetTitleDataResult.cs b/src/Prospect.Server.Api/Models/Client/FGetTitleDataResult.cs index 5d90ae9..8dc8e6a 100644 --- a/src/Prospect.Server.Api/Models/Client/FGetTitleDataResult.cs +++ b/src/Prospect.Server.Api/Models/Client/FGetTitleDataResult.cs @@ -8,5 +8,5 @@ public class FGetTitleDataResult /// [optional] a dictionary object of key / value pairs /// [JsonPropertyName("Data")] - public Dictionary Data { get; set; } + public Dictionary? Data { get; set; } } \ No newline at end of file diff --git a/src/Prospect.Server.Api/Models/Client/FGetUserDataRequest.cs b/src/Prospect.Server.Api/Models/Client/FGetUserDataRequest.cs index 235374b..8d9ebf2 100644 --- a/src/Prospect.Server.Api/Models/Client/FGetUserDataRequest.cs +++ b/src/Prospect.Server.Api/Models/Client/FGetUserDataRequest.cs @@ -9,18 +9,18 @@ public class FGetUserDataRequest /// version in the system is greater than this. /// [JsonPropertyName("IfChangedFromDataVersion")] - public List IfChangedFromDataVersion { get; set; } + public List? IfChangedFromDataVersion { get; set; } /// /// [optional] List of unique keys to load from. /// [JsonPropertyName("Keys")] - public List Keys { get; set; } + public List? Keys { get; set; } /// /// [optional] Unique PlayFab identifier of the user to load data for. Optional, defaults to yourself if not set. When specified to a /// PlayFab id of another player, then this will only return public keys for that account. /// [JsonPropertyName("PlayFabId")] - public string PlayFabId { get; set; } + public string? PlayFabId { get; set; } } \ No newline at end of file diff --git a/src/Prospect.Server.Api/Models/Client/FGetUserDataResult.cs b/src/Prospect.Server.Api/Models/Client/FGetUserDataResult.cs index e1d54ab..8a33ad0 100644 --- a/src/Prospect.Server.Api/Models/Client/FGetUserDataResult.cs +++ b/src/Prospect.Server.Api/Models/Client/FGetUserDataResult.cs @@ -9,12 +9,12 @@ public class FGetUserDataResult /// [optional] User specific data for this title. /// [JsonPropertyName("Data")] - public Dictionary Data { get; set; } + public Dictionary? Data { get; set; } /// /// [optional] Indicates the current version of the data that has been set. This is incremented with every set call for that type of /// data (read-only, internal, etc). This version can be provided in Get calls to find updated data. /// [JsonPropertyName("DataVersion")] - public uint DataVersion { get; set; } + public uint? DataVersion { get; set; } } \ No newline at end of file diff --git a/src/Prospect.Server.Api/Models/Client/FGetUserInventoryRequest.cs b/src/Prospect.Server.Api/Models/Client/FGetUserInventoryRequest.cs index 95958cc..8a5a203 100644 --- a/src/Prospect.Server.Api/Models/Client/FGetUserInventoryRequest.cs +++ b/src/Prospect.Server.Api/Models/Client/FGetUserInventoryRequest.cs @@ -9,5 +9,5 @@ public class FGetUserInventoryRequest /// [JsonPropertyName("CustomTags")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public Dictionary CustomTags { get; set; } + public Dictionary? CustomTags { get; set; } } \ No newline at end of file diff --git a/src/Prospect.Server.Api/Models/Client/FGetUserInventoryResult.cs b/src/Prospect.Server.Api/Models/Client/FGetUserInventoryResult.cs index 618a56f..bff46e6 100644 --- a/src/Prospect.Server.Api/Models/Client/FGetUserInventoryResult.cs +++ b/src/Prospect.Server.Api/Models/Client/FGetUserInventoryResult.cs @@ -10,19 +10,19 @@ public class FGetUserInventoryResult /// [JsonPropertyName("Inventory")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public List Inventory { get; set; } + public List? Inventory { get; set; } /// /// [optional] Array of virtual currency balance(s) belonging to the user. /// [JsonPropertyName("VirtualCurrency")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public Dictionary VirtualCurrency { get; set; } + public Dictionary? VirtualCurrency { get; set; } /// /// [optional] Array of virtual currency balance(s) belonging to the user. /// [JsonPropertyName("VirtualCurrencyRechargeTimes")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public Dictionary VirtualCurrencyRechargeTimes { get; set; } + public Dictionary? VirtualCurrencyRechargeTimes { get; set; } } \ No newline at end of file diff --git a/src/Prospect.Server.Api/Models/Client/FLoginWithSteamRequest.cs b/src/Prospect.Server.Api/Models/Client/FLoginWithSteamRequest.cs new file mode 100644 index 0000000..dd8906c --- /dev/null +++ b/src/Prospect.Server.Api/Models/Client/FLoginWithSteamRequest.cs @@ -0,0 +1,50 @@ +using System.Text.Json.Serialization; +using Prospect.Server.Api.Models.Client.Data; + +namespace Prospect.Server.Api.Models.Client; + +public class FLoginWithSteamRequest +{ + /// + /// [optional] Automatically create a PlayFab account if one is not currently linked to this ID. + /// + [JsonPropertyName("CreateAccount")] + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] + public bool? CreateAccount { get; set; } + + /// + /// [optional] The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). + /// + [JsonPropertyName("CustomTags")] + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] + public Dictionary? CustomTags { get; set; } + + /// + /// [optional] Base64 encoded body that is encrypted with the Title's public RSA key (Enterprise Only). + /// + [JsonPropertyName("EncryptedRequest")] + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] + public string? EncryptedRequest { get; set; } + + /// + /// [optional] Flags for which pieces of info to return for the user. + /// + [JsonPropertyName("InfoRequestParameters")] + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] + public FGetPlayerCombinedInfoRequestParams? InfoRequestParameters { get; set; } + + /// + /// [optional] Player secret that is used to verify API request signatures (Enterprise Only). + /// + [JsonPropertyName("PlayerSecret")] + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] + public string? PlayerSecret { get; set; } + + /// + /// [optional] Authentication token for the user, returned as a byte array from Steam, and converted to a string (for example, the byte + /// 0x08 should become "08"). + /// + [JsonPropertyName("SteamTicket")] + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] + public string? SteamTicket { get; set; } +} \ No newline at end of file diff --git a/src/Prospect.Server.Api/Models/Client/FServerLoginResult.cs b/src/Prospect.Server.Api/Models/Client/FServerLoginResult.cs index 0cdb9f3..a1c4a52 100644 --- a/src/Prospect.Server.Api/Models/Client/FServerLoginResult.cs +++ b/src/Prospect.Server.Api/Models/Client/FServerLoginResult.cs @@ -11,13 +11,13 @@ public class FServerLoginResult /// [JsonPropertyName("EntityToken")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public FEntityTokenResponse EntityToken { get; set; } + public FEntityTokenResponse? EntityToken { get; set; } /// /// [optional] Results for requested info. /// [JsonPropertyName("InfoResultPayload")] - public FGetPlayerCombinedInfoResultPayload InfoResultPayload { get; set; } + public FGetPlayerCombinedInfoResultPayload? InfoResultPayload { get; set; } /// /// [optional] The time of this user's previous login. If there was no previous login, then it's DateTime.MinValue @@ -37,26 +37,26 @@ public class FServerLoginResult /// [JsonPropertyName("PlayFabId")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public string PlayFabId { get; set; } + public string? PlayFabId { get; set; } /// /// [optional] Unique token authorizing the user and game at the server level, for the current session. /// [JsonPropertyName("SessionTicket")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public string SessionTicket { get; set; } + public string? SessionTicket { get; set; } /// /// [optional] Settings specific to this user. /// [JsonPropertyName("SettingsForUser")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public FUserSettings SettingsForUser { get; set; } + public FUserSettings? SettingsForUser { get; set; } /// /// [optional] The experimentation treatments for this user at the time of login. /// [JsonPropertyName("TreatmentAssignment")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public FTreatmentAssignment TreatmentAssignment { get; set; } + public FTreatmentAssignment? TreatmentAssignment { get; set; } } \ No newline at end of file diff --git a/src/Prospect.Server.Api/Models/Client/FUpdateUserDataRequest.cs b/src/Prospect.Server.Api/Models/Client/FUpdateUserDataRequest.cs index f2b953f..5a4ee65 100644 --- a/src/Prospect.Server.Api/Models/Client/FUpdateUserDataRequest.cs +++ b/src/Prospect.Server.Api/Models/Client/FUpdateUserDataRequest.cs @@ -10,19 +10,19 @@ public class FUpdateUserDataRequest /// [JsonPropertyName("CustomTags")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public Dictionary CustomTags { get; set; } + public Dictionary? CustomTags { get; set; } /// /// [optional] Key-value pairs to be written to the custom data. Note that keys are trimmed of whitespace, are limited in size, and may /// not begin with a '!' character or be null. /// - public Dictionary Data { get; set; } + public Dictionary? Data { get; set; } /// /// [optional] Optional list of Data-keys to remove from UserData. Some SDKs cannot insert null-values into Data due to language /// constraints. Use this to delete the keys directly. /// - public List KeysToRemove { get; set; } + public List? KeysToRemove { get; set; } /// /// [optional] Permission to be applied to all user data keys written in this request. Defaults to "private" if not set. diff --git a/src/Prospect.Server.Api/Models/Client/FUpdateUserTitleDisplayNameRequest.cs b/src/Prospect.Server.Api/Models/Client/FUpdateUserTitleDisplayNameRequest.cs index bb0072b..19a6e05 100644 --- a/src/Prospect.Server.Api/Models/Client/FUpdateUserTitleDisplayNameRequest.cs +++ b/src/Prospect.Server.Api/Models/Client/FUpdateUserTitleDisplayNameRequest.cs @@ -9,11 +9,11 @@ public class FUpdateUserTitleDisplayNameRequest /// [JsonPropertyName("CustomTags")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public Dictionary CustomTags { get; set; } - + public Dictionary? CustomTags { get; set; } + /// /// New title display name for the user - must be between 3 and 25 characters. /// [JsonPropertyName("DisplayName")] - public string DisplayName { get; set; } + public string DisplayName { get; set; } = null!; } \ No newline at end of file diff --git a/src/Prospect.Server.Api/Models/Client/FUpdateUserTitleDisplayNameResult.cs b/src/Prospect.Server.Api/Models/Client/FUpdateUserTitleDisplayNameResult.cs index 32d87c8..1e6e738 100644 --- a/src/Prospect.Server.Api/Models/Client/FUpdateUserTitleDisplayNameResult.cs +++ b/src/Prospect.Server.Api/Models/Client/FUpdateUserTitleDisplayNameResult.cs @@ -5,5 +5,5 @@ public class FUpdateUserTitleDisplayNameResult /// /// [optional] Current title display name for the user (this will be the original display name if the rename attempt failed). /// - public string DisplayName { get; set; } + public string? DisplayName { get; set; } } \ No newline at end of file diff --git a/src/Prospect.Server.Api/Models/CloudScript/Data/FYActiveContractPlayerData.cs b/src/Prospect.Server.Api/Models/CloudScript/Data/FYActiveContractPlayerData.cs index e66f73a..02d4a0b 100644 --- a/src/Prospect.Server.Api/Models/CloudScript/Data/FYActiveContractPlayerData.cs +++ b/src/Prospect.Server.Api/Models/CloudScript/Data/FYActiveContractPlayerData.cs @@ -4,9 +4,9 @@ namespace Prospect.Server.Api.Models.CloudScript.Data; public class FYActiveContractPlayerData { - [JsonPropertyName("contractId")] - public string ContractId { get; set; } + [JsonPropertyName("contractId")] + public string ContractId { get; set; } = null!; [JsonPropertyName("progress")] - public List Progress { get; set; } + public List Progress { get; set; } = null!; } \ No newline at end of file diff --git a/src/Prospect.Server.Api/Models/CloudScript/Data/FYFactionContractData.cs b/src/Prospect.Server.Api/Models/CloudScript/Data/FYFactionContractData.cs index 5e672f8..ca84442 100644 --- a/src/Prospect.Server.Api/Models/CloudScript/Data/FYFactionContractData.cs +++ b/src/Prospect.Server.Api/Models/CloudScript/Data/FYFactionContractData.cs @@ -5,7 +5,7 @@ namespace Prospect.Server.Api.Models.CloudScript.Data; public class FYFactionContractData { [JsonPropertyName("contractId")] - public string ContractId { get; set; } + public string ContractId { get; set; } = null!; [JsonPropertyName("contractIsLockedDueToLowFactionReputation")] public bool ContractIsLockedDueToLowFactionReputation { get; set; } diff --git a/src/Prospect.Server.Api/Models/CloudScript/Data/FYFactionContractsData.cs b/src/Prospect.Server.Api/Models/CloudScript/Data/FYFactionContractsData.cs index d04572a..4a15432 100644 --- a/src/Prospect.Server.Api/Models/CloudScript/Data/FYFactionContractsData.cs +++ b/src/Prospect.Server.Api/Models/CloudScript/Data/FYFactionContractsData.cs @@ -5,8 +5,8 @@ namespace Prospect.Server.Api.Models.CloudScript.Data; public class FYFactionContractsData { [JsonPropertyName("factionId")] - public string FactionId { get; set; } + public string FactionId { get; set; } = null!; [JsonPropertyName("contracts")] - public List Contracts { get; set; } + public List Contracts { get; set; } = null!; } \ No newline at end of file diff --git a/src/Prospect.Server.Api/Models/CloudScript/Data/FYFactionsContractsData.cs b/src/Prospect.Server.Api/Models/CloudScript/Data/FYFactionsContractsData.cs index c9e8b10..2cbddca 100644 --- a/src/Prospect.Server.Api/Models/CloudScript/Data/FYFactionsContractsData.cs +++ b/src/Prospect.Server.Api/Models/CloudScript/Data/FYFactionsContractsData.cs @@ -5,8 +5,8 @@ namespace Prospect.Server.Api.Models.CloudScript.Data; public class FYFactionsContractsData { [JsonPropertyName("boards")] - public List Boards { get; set; } + public List Boards { get; set; } = null!; [JsonPropertyName("lastBoardRefreshTimeUtc")] - public FYTimestamp LastBoardRefreshTimeUtc { get; set; } + public FYTimestamp LastBoardRefreshTimeUtc { get; set; } = null!; } \ No newline at end of file diff --git a/src/Prospect.Server.Api/Models/CloudScript/Data/FYItemCurrentlyBeingCrafted.cs b/src/Prospect.Server.Api/Models/CloudScript/Data/FYItemCurrentlyBeingCrafted.cs index 8d0bb78..355f9af 100644 --- a/src/Prospect.Server.Api/Models/CloudScript/Data/FYItemCurrentlyBeingCrafted.cs +++ b/src/Prospect.Server.Api/Models/CloudScript/Data/FYItemCurrentlyBeingCrafted.cs @@ -5,7 +5,7 @@ namespace Prospect.Server.Api.Models.CloudScript.Data; public class FYItemCurrentlyBeingCrafted { [JsonPropertyName("itemId")] - public string ItemId { get; set; } + public string ItemId { get; set; } = null!; [JsonPropertyName("itemRarity")] public int ItemRarity { get; set; } @@ -14,5 +14,5 @@ public class FYItemCurrentlyBeingCrafted public int PurchaseAmount { get; set; } [JsonPropertyName("utcTimestampWhenCraftingStarted")] - public FYTimestamp UtcTimestampWhenCraftingStarted { get; set; } + public FYTimestamp UtcTimestampWhenCraftingStarted { get; set; } = null!; } \ No newline at end of file diff --git a/src/Prospect.Server.Api/Models/CloudScript/FYGetCraftingInProgressDataResult.cs b/src/Prospect.Server.Api/Models/CloudScript/FYGetCraftingInProgressDataResult.cs index 83b6636..eefaa5c 100644 --- a/src/Prospect.Server.Api/Models/CloudScript/FYGetCraftingInProgressDataResult.cs +++ b/src/Prospect.Server.Api/Models/CloudScript/FYGetCraftingInProgressDataResult.cs @@ -6,11 +6,11 @@ namespace Prospect.Server.Api.Models.CloudScript; public class FYGetCraftingInProgressDataResult { [JsonPropertyName("userId")] - public string UserId { get; set; } + public string UserId { get; set; } = null!; [JsonPropertyName("error")] - public string Error { get; set; } + public string Error { get; set; } = null!; [JsonPropertyName("itemCurrentlyBeingCrafted")] - public FYItemCurrentlyBeingCrafted ItemCurrentlyBeingCrafted { get; set; } + public FYItemCurrentlyBeingCrafted ItemCurrentlyBeingCrafted { get; set; } = null!; } \ No newline at end of file diff --git a/src/Prospect.Server.Api/Models/CloudScript/FYGetPlayerContractsResult.cs b/src/Prospect.Server.Api/Models/CloudScript/FYGetPlayerContractsResult.cs index 06574ea..f443b75 100644 --- a/src/Prospect.Server.Api/Models/CloudScript/FYGetPlayerContractsResult.cs +++ b/src/Prospect.Server.Api/Models/CloudScript/FYGetPlayerContractsResult.cs @@ -6,16 +6,16 @@ namespace Prospect.Server.Api.Models.CloudScript; public class FYGetPlayerContractsResult { [JsonPropertyName("userId")] - public string UserId { get; set; } + public string UserId { get; set; } = null!; [JsonPropertyName("error")] - public string Error { get; set; } + public string? Error { get; set; } [JsonPropertyName("activeContracts")] - public List ActiveContracts { get; set; } + public List ActiveContracts { get; set; } = null!; [JsonPropertyName("factionsContracts")] - public FYFactionsContractsData FactionsContracts { get; set; } + public FYFactionsContractsData FactionsContracts { get; set; } = null!; [JsonPropertyName("refreshHours24UtcFromBackend")] public int RefreshHours24UtcFromBackend { get; set; } diff --git a/src/Prospect.Server.Api/Models/Multiplayer/Data/FQosServer.cs b/src/Prospect.Server.Api/Models/Multiplayer/Data/FQosServer.cs new file mode 100644 index 0000000..3c0e7f6 --- /dev/null +++ b/src/Prospect.Server.Api/Models/Multiplayer/Data/FQosServer.cs @@ -0,0 +1,20 @@ +using System.Text.Json.Serialization; + +namespace Prospect.Server.Api.Models.Multiplayer.Data; + +public class FQosServer +{ + /// + /// [optional] The region the QoS server is located in. + /// + [JsonPropertyName("Error")] + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] + public string? Region { get; set; } + + /// + /// [optional] The QoS server URL. + /// + [JsonPropertyName("ServerUrl")] + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] + public string? ServerUrl { get; set; } +} \ No newline at end of file diff --git a/src/Prospect.Server.Api/Models/Multiplayer/FListQosServersForTitleRequest.cs b/src/Prospect.Server.Api/Models/Multiplayer/FListQosServersForTitleRequest.cs new file mode 100644 index 0000000..9e676d6 --- /dev/null +++ b/src/Prospect.Server.Api/Models/Multiplayer/FListQosServersForTitleRequest.cs @@ -0,0 +1,20 @@ +using System.Text.Json.Serialization; + +namespace Prospect.Server.Api.Models.Multiplayer; + +public class FListQosServersForTitleRequest +{ + /// + /// [optional] The optional custom tags associated with the request (e.g. build number, external trace identifiers, etc.). + /// + [JsonPropertyName("CustomTags")] + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] + public Dictionary? CustomTags { get; set; } + + /// + /// [optional] Indicates that the response should contain Qos servers for all regions, including those where there are no builds + /// deployed for the title. + /// + [JsonPropertyName("IncludeAllRegions")] + public bool? IncludeAllRegions { get; set; } +} \ No newline at end of file diff --git a/src/Prospect.Server.Api/Models/Multiplayer/FListQosServersForTitleResponse.cs b/src/Prospect.Server.Api/Models/Multiplayer/FListQosServersForTitleResponse.cs new file mode 100644 index 0000000..be74e3c --- /dev/null +++ b/src/Prospect.Server.Api/Models/Multiplayer/FListQosServersForTitleResponse.cs @@ -0,0 +1,28 @@ +using System.Text.Json.Serialization; +using Prospect.Server.Api.Models.Multiplayer.Data; + +namespace Prospect.Server.Api.Models.Multiplayer; + +public class FListQosServersForTitleResponse +{ + /// + /// The page size on the response. + /// + [JsonPropertyName("PageSize")] + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] + public int PageSize { get; set; } + + /// + /// [optional] The list of QoS servers. + /// + [JsonPropertyName("QosServers")] + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] + public List? QosServers { get; set; } + + /// + /// [optional] The skip token for the paged response. + /// + [JsonPropertyName("SkipToken")] + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] + public string? SkipToken { get; set; } +} \ No newline at end of file diff --git a/src/Prospect.Server.Api/Prospect.Server.Api.csproj b/src/Prospect.Server.Api/Prospect.Server.Api.csproj index 254641d..ea9e827 100644 --- a/src/Prospect.Server.Api/Prospect.Server.Api.csproj +++ b/src/Prospect.Server.Api/Prospect.Server.Api.csproj @@ -3,6 +3,7 @@ net6.0 true + enable