From 46106cc2a4fcb731d1c7cbc905f5fe50ede99511 Mon Sep 17 00:00:00 2001 From: Stuart Ferguson Date: Sat, 26 Apr 2025 14:19:51 +0100 Subject: [PATCH] Add TransactionDateTime to DataTransferObject - Introduced a new `TransactionDateTime` property in the `DataTransferObject` class with appropriate XML documentation and JSON serialization. - Removed the `TransactionDateTime` property from `LogonTransactionRequest`, `ReconciliationRequest`, and `SaleTransactionRequest` classes to centralize its management. - Updated `TransactionController` with additional using directives for improved organization. - Implemented logic to set `TransactionDateTime` after deserialization, ensuring correct handling of UTC dates. - Modified `ProcessSpecificMessage` method to accommodate the new `TransactionDateTime` logic for `LogonTransactionRequest`. --- .../DataTransferObject.cs | 9 +++++++++ .../LogonTransactionRequest.cs | 11 +---------- .../ReconciliationRequest.cs | 9 --------- .../SaleTransactionRequest.cs | 5 +---- .../Controllers/TransactionController.cs | 18 ++++++++++++------ 5 files changed, 23 insertions(+), 29 deletions(-) diff --git a/TransactionProcessor.DataTransferObjects/DataTransferObject.cs b/TransactionProcessor.DataTransferObjects/DataTransferObject.cs index e2abdf67..4a49e602 100644 --- a/TransactionProcessor.DataTransferObjects/DataTransferObject.cs +++ b/TransactionProcessor.DataTransferObjects/DataTransferObject.cs @@ -31,6 +31,15 @@ public class DataTransferObject [JsonProperty("merchant_id")] public Guid MerchantId { get; set; } + /// + /// Gets or sets the transaction date time. + /// + /// + /// The transaction date time. + /// + [JsonProperty("transaction_date_time")] + public DateTime TransactionDateTime { get; set; } + #endregion } } \ No newline at end of file diff --git a/TransactionProcessor.DataTransferObjects/LogonTransactionRequest.cs b/TransactionProcessor.DataTransferObjects/LogonTransactionRequest.cs index 69122c26..34aa95fa 100644 --- a/TransactionProcessor.DataTransferObjects/LogonTransactionRequest.cs +++ b/TransactionProcessor.DataTransferObjects/LogonTransactionRequest.cs @@ -20,16 +20,7 @@ public class LogonTransactionRequest : DataTransferObject /// [JsonProperty("device_identifier")] public String DeviceIdentifier { get; set; } - - /// - /// Gets or sets the transaction date time. - /// - /// - /// The transaction date time. - /// - [JsonProperty("transaction_date_time")] - public DateTime TransactionDateTime { get; set; } - + /// /// Gets or sets the transaction number. /// diff --git a/TransactionProcessor.DataTransferObjects/ReconciliationRequest.cs b/TransactionProcessor.DataTransferObjects/ReconciliationRequest.cs index 4fcaec85..6b0b2a5c 100644 --- a/TransactionProcessor.DataTransferObjects/ReconciliationRequest.cs +++ b/TransactionProcessor.DataTransferObjects/ReconciliationRequest.cs @@ -41,15 +41,6 @@ public class ReconciliationRequest : DataTransferObject [JsonProperty("transaction_count")] public Int32 TransactionCount { get; set; } - /// - /// Gets or sets the transaction date time. - /// - /// - /// The transaction date time. - /// - [JsonProperty("transaction_date_time")] - public DateTime TransactionDateTime { get; set; } - /// /// Gets or sets the transaction value. /// diff --git a/TransactionProcessor.DataTransferObjects/SaleTransactionRequest.cs b/TransactionProcessor.DataTransferObjects/SaleTransactionRequest.cs index 87b1cbd2..920282a4 100644 --- a/TransactionProcessor.DataTransferObjects/SaleTransactionRequest.cs +++ b/TransactionProcessor.DataTransferObjects/SaleTransactionRequest.cs @@ -27,10 +27,7 @@ public class SaleTransactionRequest : DataTransferObject [JsonProperty("product_id")] public Guid ProductId { get; set; } - - [JsonProperty("transaction_date_time")] - public DateTime TransactionDateTime { get; set; } - + [JsonProperty("transaction_number")] public String TransactionNumber { get; set; } diff --git a/TransactionProcessor/Controllers/TransactionController.cs b/TransactionProcessor/Controllers/TransactionController.cs index f03e7f5e..9fbf3d56 100644 --- a/TransactionProcessor/Controllers/TransactionController.cs +++ b/TransactionProcessor/Controllers/TransactionController.cs @@ -4,15 +4,11 @@ namespace TransactionProcessor.Controllers { - using System; - using System.Collections.Generic; - using System.Diagnostics.CodeAnalysis; - using System.Threading; - using System.Threading.Tasks; using BusinessLogic.Requests; using Common.Examples; using DataTransferObjects; using Factories; + using Humanizer; using MediatR; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; @@ -21,6 +17,11 @@ namespace TransactionProcessor.Controllers using Shared.General; using Swashbuckle.AspNetCore.Annotations; using Swashbuckle.AspNetCore.Filters; + using System; + using System.Collections.Generic; + using System.Diagnostics.CodeAnalysis; + using System.Threading; + using System.Threading.Tasks; /// /// @@ -81,8 +82,13 @@ public async Task PerformTransaction([FromBody] SerialisedMessage { TypeNameHandling = TypeNameHandling.Auto }); + dto.MerchantId = merchantId; dto.EstateId = estateId; + if (dto.TransactionDateTime.Kind == DateTimeKind.Utc) + { + dto.TransactionDateTime = new DateTime(dto.TransactionDateTime.Ticks, DateTimeKind.Unspecified); + } Result transactionResult = dto switch { LogonTransactionRequest ltr => await this.ProcessSpecificMessage(ltr, cancellationToken), @@ -124,7 +130,7 @@ private async Task> ProcessSpecificMessage(LogonTransa CancellationToken cancellationToken) { Guid transactionId = Guid.NewGuid(); - + TransactionCommands.ProcessLogonTransactionCommand command = new(transactionId, logonTransactionRequest.EstateId, logonTransactionRequest.MerchantId,