diff --git a/Libraries/Core/Models/Eft/Common/Request/BaseInteractionRequestData.cs b/Libraries/Core/Models/Eft/Common/Request/BaseInteractionRequestData.cs index b2dd2d0a..ffa9981e 100644 --- a/Libraries/Core/Models/Eft/Common/Request/BaseInteractionRequestData.cs +++ b/Libraries/Core/Models/Eft/Common/Request/BaseInteractionRequestData.cs @@ -5,7 +5,7 @@ namespace Core.Models.Eft.Common.Request; public record BaseInteractionRequestData { [JsonPropertyName("Action")] - public virtual string? Action { get; set; } + public string? Action { get; set; } [JsonPropertyName("fromOwner")] public OwnerInfo? FromOwner { get; set; } diff --git a/Libraries/Core/Models/Eft/Customization/BuyClothingRequestData.cs b/Libraries/Core/Models/Eft/Customization/BuyClothingRequestData.cs index 5f583d1a..0f6f1b47 100644 --- a/Libraries/Core/Models/Eft/Customization/BuyClothingRequestData.cs +++ b/Libraries/Core/Models/Eft/Customization/BuyClothingRequestData.cs @@ -1,12 +1,10 @@ using System.Text.Json.Serialization; +using Core.Models.Eft.Inventory; namespace Core.Models.Eft.Customization; -public record BuyClothingRequestData +public record BuyClothingRequestData : InventoryBaseActionRequestData { - [JsonPropertyName("Action")] - public string? Action { get; set; } = "CustomizationBuy"; - [JsonPropertyName("offer")] public string? Offer { get; set; } diff --git a/Libraries/Core/Models/Eft/Customization/CustomizationSetRequest.cs b/Libraries/Core/Models/Eft/Customization/CustomizationSetRequest.cs index 9dc8c708..7314b7b3 100644 --- a/Libraries/Core/Models/Eft/Customization/CustomizationSetRequest.cs +++ b/Libraries/Core/Models/Eft/Customization/CustomizationSetRequest.cs @@ -1,12 +1,10 @@ using System.Text.Json.Serialization; +using Core.Models.Eft.Inventory; namespace Core.Models.Eft.Customization; -public record CustomizationSetRequest +public record CustomizationSetRequest : InventoryBaseActionRequestData { - [JsonPropertyName("Action")] - public string? Action { get; set; } = "CustomizationSet"; - [JsonPropertyName("customizations")] public List? Customizations { get; set; } } diff --git a/Libraries/Core/Models/Eft/Health/OffraidEatRequestData.cs b/Libraries/Core/Models/Eft/Health/OffraidEatRequestData.cs index 3244c60b..75ac3647 100644 --- a/Libraries/Core/Models/Eft/Health/OffraidEatRequestData.cs +++ b/Libraries/Core/Models/Eft/Health/OffraidEatRequestData.cs @@ -5,9 +5,6 @@ namespace Core.Models.Eft.Health; public record OffraidEatRequestData : BaseInteractionRequestData { - [JsonPropertyName("Action")] - public string? Action { get; set; } = "Eat"; - [JsonPropertyName("item")] public string? Item { get; set; } diff --git a/Libraries/Core/Models/Eft/Health/OffraidHealRequestData.cs b/Libraries/Core/Models/Eft/Health/OffraidHealRequestData.cs index 580b5178..5d26fe2a 100644 --- a/Libraries/Core/Models/Eft/Health/OffraidHealRequestData.cs +++ b/Libraries/Core/Models/Eft/Health/OffraidHealRequestData.cs @@ -4,7 +4,6 @@ namespace Core.Models.Eft.Health; public record OffraidHealRequestData : BaseInteractionRequestData { - public override string? Action { get; set; } = "Heal"; public string? Item { get; set; } public BodyPart? Part { get; set; } public int? Count { get; set; } diff --git a/Libraries/Core/Models/Eft/Insurance/InsureRequestData.cs b/Libraries/Core/Models/Eft/Insurance/InsureRequestData.cs index bcd967f0..89337560 100644 --- a/Libraries/Core/Models/Eft/Insurance/InsureRequestData.cs +++ b/Libraries/Core/Models/Eft/Insurance/InsureRequestData.cs @@ -5,9 +5,6 @@ namespace Core.Models.Eft.Insurance; public record InsureRequestData : BaseInteractionRequestData { - [JsonPropertyName("Action")] - public string? Action { get; set; } = "Insure"; - [JsonPropertyName("tid")] public string? TransactionId { get; set; } diff --git a/Libraries/Core/Models/Eft/Inventory/InventoryAddRequestData.cs b/Libraries/Core/Models/Eft/Inventory/InventoryAddRequestData.cs index 3f2fcb38..7a1545d8 100644 --- a/Libraries/Core/Models/Eft/Inventory/InventoryAddRequestData.cs +++ b/Libraries/Core/Models/Eft/Inventory/InventoryAddRequestData.cs @@ -4,9 +4,6 @@ namespace Core.Models.Eft.Inventory; public record InventoryAddRequestData : InventoryBaseActionRequestData { - [JsonPropertyName("Action")] - public string? Action { get; set; } = "Add"; - [JsonPropertyName("item")] public string? Item { get; set; } diff --git a/Libraries/Core/Models/Eft/Inventory/InventoryBindRequestData.cs b/Libraries/Core/Models/Eft/Inventory/InventoryBindRequestData.cs index 5c1b2586..e09deb47 100644 --- a/Libraries/Core/Models/Eft/Inventory/InventoryBindRequestData.cs +++ b/Libraries/Core/Models/Eft/Inventory/InventoryBindRequestData.cs @@ -4,9 +4,6 @@ namespace Core.Models.Eft.Inventory; public record InventoryBindRequestData : InventoryBaseActionRequestData { - [JsonPropertyName("Action")] - public string? Action { get; set; } = "Bind"; - [JsonPropertyName("item")] public string? Item { get; set; } diff --git a/Libraries/Core/Models/Eft/Inventory/InventoryCreateMarkerRequestData.cs b/Libraries/Core/Models/Eft/Inventory/InventoryCreateMarkerRequestData.cs index 34e7b268..5fa5324a 100644 --- a/Libraries/Core/Models/Eft/Inventory/InventoryCreateMarkerRequestData.cs +++ b/Libraries/Core/Models/Eft/Inventory/InventoryCreateMarkerRequestData.cs @@ -5,9 +5,6 @@ namespace Core.Models.Eft.Inventory; public record InventoryCreateMarkerRequestData : InventoryBaseActionRequestData { - [JsonPropertyName("Action")] - public string? Action { get; set; } = "CreateMapMarker"; - [JsonPropertyName("item")] public string? Item { get; set; } diff --git a/Libraries/Core/Models/Eft/Inventory/InventoryDeleteMarkerRequestData.cs b/Libraries/Core/Models/Eft/Inventory/InventoryDeleteMarkerRequestData.cs index d84666ae..98d2c3bb 100644 --- a/Libraries/Core/Models/Eft/Inventory/InventoryDeleteMarkerRequestData.cs +++ b/Libraries/Core/Models/Eft/Inventory/InventoryDeleteMarkerRequestData.cs @@ -4,9 +4,6 @@ namespace Core.Models.Eft.Inventory; public record InventoryDeleteMarkerRequestData : InventoryBaseActionRequestData { - [JsonPropertyName("Action")] - public string? Action { get; set; } = "DeleteMapMarker"; - [JsonPropertyName("item")] public string? Item { get; set; } diff --git a/Libraries/Core/Models/Eft/Inventory/InventoryEditMarkerRequestData.cs b/Libraries/Core/Models/Eft/Inventory/InventoryEditMarkerRequestData.cs index e38e0ce4..72513715 100644 --- a/Libraries/Core/Models/Eft/Inventory/InventoryEditMarkerRequestData.cs +++ b/Libraries/Core/Models/Eft/Inventory/InventoryEditMarkerRequestData.cs @@ -5,9 +5,6 @@ namespace Core.Models.Eft.Inventory; public record InventoryEditMarkerRequestData : InventoryBaseActionRequestData { - [JsonPropertyName("Action")] - public string? Action { get; set; } = "EditMapMarker"; - [JsonPropertyName("item")] public string? Item { get; set; } diff --git a/Libraries/Core/Models/Eft/Inventory/InventoryExamineRequestData.cs b/Libraries/Core/Models/Eft/Inventory/InventoryExamineRequestData.cs index 16f27911..385cf403 100644 --- a/Libraries/Core/Models/Eft/Inventory/InventoryExamineRequestData.cs +++ b/Libraries/Core/Models/Eft/Inventory/InventoryExamineRequestData.cs @@ -5,9 +5,6 @@ namespace Core.Models.Eft.Inventory; public record InventoryExamineRequestData : InventoryBaseActionRequestData { - [JsonPropertyName("Action")] - public string? Action { get; set; } = "Examine"; - [JsonPropertyName("item")] public string? Item { get; set; } diff --git a/Libraries/Core/Models/Eft/Inventory/InventoryFoldRequestData.cs b/Libraries/Core/Models/Eft/Inventory/InventoryFoldRequestData.cs index 968af119..eeae15db 100644 --- a/Libraries/Core/Models/Eft/Inventory/InventoryFoldRequestData.cs +++ b/Libraries/Core/Models/Eft/Inventory/InventoryFoldRequestData.cs @@ -4,9 +4,6 @@ namespace Core.Models.Eft.Inventory; public record InventoryFoldRequestData : InventoryBaseActionRequestData { - [JsonPropertyName("Action")] - public string? Action { get; set; } = "Fold"; - [JsonPropertyName("item")] public string? Item { get; set; } diff --git a/Libraries/Core/Models/Eft/Inventory/InventoryMergeRequestData.cs b/Libraries/Core/Models/Eft/Inventory/InventoryMergeRequestData.cs index 05bf3b5c..16eab832 100644 --- a/Libraries/Core/Models/Eft/Inventory/InventoryMergeRequestData.cs +++ b/Libraries/Core/Models/Eft/Inventory/InventoryMergeRequestData.cs @@ -4,9 +4,6 @@ namespace Core.Models.Eft.Inventory; public record InventoryMergeRequestData : InventoryBaseActionRequestData { - [JsonPropertyName("Action")] - public string? Action { get; set; } = "Merge"; - [JsonPropertyName("item")] public string? Item { get; set; } diff --git a/Libraries/Core/Models/Eft/Inventory/InventoryMoveRequestData.cs b/Libraries/Core/Models/Eft/Inventory/InventoryMoveRequestData.cs index fc32085d..c723f1d6 100644 --- a/Libraries/Core/Models/Eft/Inventory/InventoryMoveRequestData.cs +++ b/Libraries/Core/Models/Eft/Inventory/InventoryMoveRequestData.cs @@ -4,9 +4,6 @@ namespace Core.Models.Eft.Inventory; public record InventoryMoveRequestData : InventoryBaseActionRequestData { - [JsonPropertyName("Action")] - public string? Action { get; set; } = "Move"; - [JsonPropertyName("item")] public string? Item { get; set; } diff --git a/Libraries/Core/Models/Eft/Inventory/InventoryReadEncyclopediaRequestData.cs b/Libraries/Core/Models/Eft/Inventory/InventoryReadEncyclopediaRequestData.cs index 85084cde..d4473d9b 100644 --- a/Libraries/Core/Models/Eft/Inventory/InventoryReadEncyclopediaRequestData.cs +++ b/Libraries/Core/Models/Eft/Inventory/InventoryReadEncyclopediaRequestData.cs @@ -4,9 +4,6 @@ namespace Core.Models.Eft.Inventory; public record InventoryReadEncyclopediaRequestData : InventoryBaseActionRequestData { - [JsonPropertyName("Action")] - public string? Action { get; set; } = "ReadEncyclopedia"; - [JsonPropertyName("ids")] public List? Ids { get; set; } } diff --git a/Libraries/Core/Models/Eft/Inventory/InventoryRemoveRequestData.cs b/Libraries/Core/Models/Eft/Inventory/InventoryRemoveRequestData.cs index dc50a228..924a2cdc 100644 --- a/Libraries/Core/Models/Eft/Inventory/InventoryRemoveRequestData.cs +++ b/Libraries/Core/Models/Eft/Inventory/InventoryRemoveRequestData.cs @@ -4,9 +4,6 @@ namespace Core.Models.Eft.Inventory; public record InventoryRemoveRequestData : InventoryBaseActionRequestData { - [JsonPropertyName("Action")] - public string? Action { get; set; } = "Remove"; - [JsonPropertyName("item")] public string? Item { get; set; } } diff --git a/Libraries/Core/Models/Eft/Inventory/InventorySortRequestData.cs b/Libraries/Core/Models/Eft/Inventory/InventorySortRequestData.cs index df8a4184..4ca45915 100644 --- a/Libraries/Core/Models/Eft/Inventory/InventorySortRequestData.cs +++ b/Libraries/Core/Models/Eft/Inventory/InventorySortRequestData.cs @@ -5,9 +5,6 @@ namespace Core.Models.Eft.Inventory; public record InventorySortRequestData : InventoryBaseActionRequestData { - [JsonPropertyName("Action")] - public string? Action { get; set; } = "ApplyInventoryChanges"; - [JsonPropertyName("changedItems")] public List? ChangedItems { get; set; } } diff --git a/Libraries/Core/Models/Eft/Inventory/InventorySplitRequestData.cs b/Libraries/Core/Models/Eft/Inventory/InventorySplitRequestData.cs index 720f17c9..1b87ef75 100644 --- a/Libraries/Core/Models/Eft/Inventory/InventorySplitRequestData.cs +++ b/Libraries/Core/Models/Eft/Inventory/InventorySplitRequestData.cs @@ -4,9 +4,6 @@ namespace Core.Models.Eft.Inventory; public record InventorySplitRequestData : InventoryBaseActionRequestData { - [JsonPropertyName("Action")] - public string? Action { get; } = "Split"; - /** Id of item to split */ [JsonPropertyName("splitItem")] public string? SplitItem { get; set; } diff --git a/Libraries/Core/Models/Eft/Inventory/InventorySwapRequestData.cs b/Libraries/Core/Models/Eft/Inventory/InventorySwapRequestData.cs index 5f2e21fc..30088293 100644 --- a/Libraries/Core/Models/Eft/Inventory/InventorySwapRequestData.cs +++ b/Libraries/Core/Models/Eft/Inventory/InventorySwapRequestData.cs @@ -5,9 +5,6 @@ namespace Core.Models.Eft.Inventory; public record InventorySwapRequestData : InventoryBaseActionRequestData { - [JsonPropertyName("Action")] - public string? Action { get; set; } = "Swap"; - [JsonPropertyName("item")] public string? Item { get; set; } diff --git a/Libraries/Core/Models/Eft/Inventory/InventoryTagRequestData.cs b/Libraries/Core/Models/Eft/Inventory/InventoryTagRequestData.cs index 57c18dcb..156f9016 100644 --- a/Libraries/Core/Models/Eft/Inventory/InventoryTagRequestData.cs +++ b/Libraries/Core/Models/Eft/Inventory/InventoryTagRequestData.cs @@ -4,9 +4,6 @@ namespace Core.Models.Eft.Inventory; public record InventoryTagRequestData : InventoryBaseActionRequestData { - [JsonPropertyName("Action")] - public string? Action { get; set; } = "Tag"; - [JsonPropertyName("item")] public string? Item { get; set; } diff --git a/Libraries/Core/Models/Eft/Inventory/InventoryToggleRequestData.cs b/Libraries/Core/Models/Eft/Inventory/InventoryToggleRequestData.cs index 94b00743..4c30f7a0 100644 --- a/Libraries/Core/Models/Eft/Inventory/InventoryToggleRequestData.cs +++ b/Libraries/Core/Models/Eft/Inventory/InventoryToggleRequestData.cs @@ -4,9 +4,6 @@ namespace Core.Models.Eft.Inventory; public record InventoryToggleRequestData : InventoryBaseActionRequestData { - [JsonPropertyName("Action")] - public string? Action { get; set; } = "Toggle"; - [JsonPropertyName("item")] public string? Item { get; set; } diff --git a/Libraries/Core/Models/Eft/Inventory/InventoryTransferRequestData.cs b/Libraries/Core/Models/Eft/Inventory/InventoryTransferRequestData.cs index 791a5d23..f7791ddc 100644 --- a/Libraries/Core/Models/Eft/Inventory/InventoryTransferRequestData.cs +++ b/Libraries/Core/Models/Eft/Inventory/InventoryTransferRequestData.cs @@ -4,9 +4,6 @@ namespace Core.Models.Eft.Inventory; public record InventoryTransferRequestData : InventoryBaseActionRequestData { - [JsonPropertyName("Action")] - public string? Action { get; set; } = "Transfer"; - [JsonPropertyName("item")] public string? Item { get; set; } diff --git a/Libraries/Core/Models/Eft/Inventory/InventoryUnbindRequestData.cs b/Libraries/Core/Models/Eft/Inventory/InventoryUnbindRequestData.cs index 355aad86..27bdbf08 100644 --- a/Libraries/Core/Models/Eft/Inventory/InventoryUnbindRequestData.cs +++ b/Libraries/Core/Models/Eft/Inventory/InventoryUnbindRequestData.cs @@ -4,9 +4,6 @@ namespace Core.Models.Eft.Inventory; public record InventoryUnbindRequestData : InventoryBaseActionRequestData { - [JsonPropertyName("Action")] - public string? Action { get; set; } = "Unbind"; - [JsonPropertyName("item")] public string? Item { get; set; } diff --git a/Libraries/Core/Models/Eft/Inventory/OpenRandomLootContainerRequestData.cs b/Libraries/Core/Models/Eft/Inventory/OpenRandomLootContainerRequestData.cs index d378d619..fc904aca 100644 --- a/Libraries/Core/Models/Eft/Inventory/OpenRandomLootContainerRequestData.cs +++ b/Libraries/Core/Models/Eft/Inventory/OpenRandomLootContainerRequestData.cs @@ -2,10 +2,8 @@ namespace Core.Models.Eft.Inventory; -public record OpenRandomLootContainerRequestData +public record OpenRandomLootContainerRequestData : InventoryBaseActionRequestData { - public string? Action { get; set; } = "OpenRandomLootContainer"; - /// /// Container item id being opened /// diff --git a/Libraries/Core/Models/Eft/Inventory/PinOrLockItemRequest.cs b/Libraries/Core/Models/Eft/Inventory/PinOrLockItemRequest.cs index 76252b81..1ef9d14a 100644 --- a/Libraries/Core/Models/Eft/Inventory/PinOrLockItemRequest.cs +++ b/Libraries/Core/Models/Eft/Inventory/PinOrLockItemRequest.cs @@ -3,11 +3,8 @@ using Core.Models.Eft.Common.Tables; namespace Core.Models.Eft.Inventory; -public record PinOrLockItemRequest +public record PinOrLockItemRequest : InventoryBaseActionRequestData { - [JsonPropertyName("Action")] - public string? Action { get; set; } = "PinLock"; - /** Id of item being pinned */ [JsonPropertyName("Item")] public string? Item { get; set; } diff --git a/Libraries/Core/Models/Eft/Inventory/RedeemProfileRequestData.cs b/Libraries/Core/Models/Eft/Inventory/RedeemProfileRequestData.cs index 683aa024..e540aebd 100644 --- a/Libraries/Core/Models/Eft/Inventory/RedeemProfileRequestData.cs +++ b/Libraries/Core/Models/Eft/Inventory/RedeemProfileRequestData.cs @@ -4,9 +4,6 @@ namespace Core.Models.Eft.Inventory; public record RedeemProfileRequestData : InventoryBaseActionRequestData { - [JsonPropertyName("Action")] - public string? Action { get; set; } = "RedeemProfileReward"; - [JsonPropertyName("events")] public List? Events { get; set; } } diff --git a/Libraries/Core/Models/Eft/Inventory/SetFavoriteItems.cs b/Libraries/Core/Models/Eft/Inventory/SetFavoriteItems.cs index d08272b6..c6a223b0 100644 --- a/Libraries/Core/Models/Eft/Inventory/SetFavoriteItems.cs +++ b/Libraries/Core/Models/Eft/Inventory/SetFavoriteItems.cs @@ -4,9 +4,6 @@ namespace Core.Models.Eft.Inventory; public record SetFavoriteItems : InventoryBaseActionRequestData { - [JsonPropertyName("Action")] - public string? Action { get; set; } = "SetFavoriteItems"; - [JsonPropertyName("items")] public List? Items { get; set; } diff --git a/Libraries/Core/Models/Eft/Notes/NoteActionData.cs b/Libraries/Core/Models/Eft/Notes/NoteActionData.cs index 21b4fee5..c03729ef 100644 --- a/Libraries/Core/Models/Eft/Notes/NoteActionData.cs +++ b/Libraries/Core/Models/Eft/Notes/NoteActionData.cs @@ -5,9 +5,6 @@ namespace Core.Models.Eft.Notes; public record NoteActionData : BaseInteractionRequestData { - [JsonPropertyName("Action")] - public string? Action { get; set; } - [JsonPropertyName("index")] public int? Index { get; set; } diff --git a/Libraries/Core/Utils/Json/Converters/BaseInteractionRequestDataConverter.cs b/Libraries/Core/Utils/Json/Converters/BaseInteractionRequestDataConverter.cs new file mode 100644 index 00000000..9e2272bb --- /dev/null +++ b/Libraries/Core/Utils/Json/Converters/BaseInteractionRequestDataConverter.cs @@ -0,0 +1,37 @@ +using System.Text.Json; +using System.Text.Json.Serialization; +using Core.Models.Eft.Common.Request; +using Core.Models.Eft.Customization; + +namespace Core.Utils.Json.Converters; + +public class BaseInteractionRequestDataConverter : JsonConverter +{ + public override BaseInteractionRequestData? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + using var jsonDocument = JsonDocument.ParseValue(ref reader); + var jsonText = jsonDocument.RootElement.GetRawText(); + var value = JsonSerializer.Deserialize(jsonText, options); + return ConvertToCorrectType(value, jsonText, options); + } + + private BaseInteractionRequestData? ConvertToCorrectType(BaseInteractionRequestData? value, string jsonText, JsonSerializerOptions options) + { + switch (value.Action) + { + case "CustomizationBuy": + return JsonSerializer.Deserialize(jsonText, options); + case "CustomizationSet": + return JsonSerializer.Deserialize(jsonText, options); + + /////////////////////////////////////////// + + + } + } + + public override void Write(Utf8JsonWriter writer, BaseInteractionRequestData value, JsonSerializerOptions options) + { + JsonSerializer.Serialize(writer, value, options); + } +}