From 9d17464e5ca5368ca4dc51ad03cda158045cf982 Mon Sep 17 00:00:00 2001 From: StuartFerguson Date: Wed, 8 Apr 2026 21:22:01 +0100 Subject: [PATCH] Refactor ProcessSaleTransaction to use parameter tuples Refactored the ProcessSaleTransaction method and related code to accept (estateId, merchantId) and (operatorId, contractId, productId) as tuples instead of separate parameters. Updated the interface, implementation, request handler, and all unit tests to use the new tuple-based signatures for improved clarity and maintainability. --- .../MediatorTests.cs | 7 +--- .../RequestHandlerTests.cs | 7 +--- ...tionProcessorACLApplicationServiceTests.cs | 37 ++++++------------- .../ProcessLogonTransactionRequestHandler.cs | 7 +--- ...ansactionProcessorACLApplicationService.cs | 18 ++++----- ...ansactionProcessorACLApplicationService.cs | 18 ++++----- 6 files changed, 32 insertions(+), 62 deletions(-) diff --git a/TransactionProcessorACL.BusinessLogic.Tests/MediatorTests.cs b/TransactionProcessorACL.BusinessLogic.Tests/MediatorTests.cs index e26f372..13f6cb1 100644 --- a/TransactionProcessorACL.BusinessLogic.Tests/MediatorTests.cs +++ b/TransactionProcessorACL.BusinessLogic.Tests/MediatorTests.cs @@ -108,15 +108,12 @@ public async Task> ProcessLogonTransacti String deviceIdentifier, CancellationToken cancellationToken) => Result.Success(new ProcessLogonTransactionResponse()); - public async Task> ProcessSaleTransaction(Guid estateId, - Guid merchantId, + public async Task> ProcessSaleTransaction((Guid estateId, Guid merchantId) merchantData, DateTime transactionDateTime, String transactionNumber, String deviceIdentifier, - Guid operatorId, String customerEmailAddress, - Guid contractId, - Guid productId, + (Guid operatorId, Guid contractId, Guid productId) productData, Dictionary additionalRequestMetadata, CancellationToken cancellationToken) => Result.Success(new ProcessSaleTransactionResponse()); diff --git a/TransactionProcessorACL.BusinessLogic.Tests/RequestHandlerTests.cs b/TransactionProcessorACL.BusinessLogic.Tests/RequestHandlerTests.cs index fe0e541..c1f0e75 100644 --- a/TransactionProcessorACL.BusinessLogic.Tests/RequestHandlerTests.cs +++ b/TransactionProcessorACL.BusinessLogic.Tests/RequestHandlerTests.cs @@ -72,15 +72,12 @@ public async Task ProcessSaleTransactionRequestHandler_Handle_RequestIsHandled() { Mock applicationService = new Mock(); applicationService - .Setup(a => a.ProcessSaleTransaction(It.IsAny(), - It.IsAny(), + .Setup(a => a.ProcessSaleTransaction(It.IsAny<(Guid, Guid)>(), It.IsAny(), It.IsAny(), It.IsAny(), - It.IsAny(), It.IsAny(), - It.IsAny(), - It.IsAny(), + It.IsAny<(Guid, Guid, Guid)>(), It.IsAny>(), It.IsAny())).ReturnsAsync(TestData.ProcessSaleTransactionResponse); diff --git a/TransactionProcessorACL.BusinessLogic.Tests/TransactionProcessorACLApplicationServiceTests.cs b/TransactionProcessorACL.BusinessLogic.Tests/TransactionProcessorACLApplicationServiceTests.cs index bbe03d2..2d65c02 100644 --- a/TransactionProcessorACL.BusinessLogic.Tests/TransactionProcessorACLApplicationServiceTests.cs +++ b/TransactionProcessorACL.BusinessLogic.Tests/TransactionProcessorACLApplicationServiceTests.cs @@ -165,15 +165,12 @@ public async Task TransactionProcessorACLApplicationService_ProcessSaleTransacti .ReturnsAsync(TestData.SerialisedMessageResponseSale); securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.TokenResponse)); - Result result = await applicationService.ProcessSaleTransaction(TestData.EstateId, - TestData.MerchantId, - TestData.TransactionDateTime, + Result result = await applicationService.ProcessSaleTransaction((TestData.EstateId, TestData.MerchantId), + TestData.TransactionDateTime, TestData.TransactionNumber, TestData.DeviceIdentifier, - TestData.OperatorId, TestData.CustomerEmailAddress, - TestData.ContractId, - TestData.ProductId, + (TestData.OperatorId, TestData.ContractId, TestData.ProductId), TestData.AdditionalRequestMetadata, CancellationToken.None); @@ -193,15 +190,12 @@ public async Task TransactionProcessorACLApplicationService_ProcessSaleTransacti .ReturnsAsync(TestData.SerialisedMessageResponseSale); securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.TokenResponse)); - Result result = await applicationService.ProcessSaleTransaction(TestData.EstateId, - TestData.MerchantId, + Result result = await applicationService.ProcessSaleTransaction((TestData.EstateId, TestData.MerchantId), TestData.TransactionDateTime, TestData.TransactionNumber, TestData.DeviceIdentifier, - TestData.OperatorId, TestData.CustomerEmailAddress, - TestData.ContractId, - TestData.ProductId, + (TestData.OperatorId, TestData.ContractId, TestData.ProductId), TestData.AdditionalRequestMetadata, CancellationToken.None); @@ -235,15 +229,12 @@ public async Task TransactionProcessorACLApplicationService_ProcessSaleTransacti { securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Failure()); - Result result = await applicationService.ProcessSaleTransaction(TestData.EstateId, - TestData.MerchantId, + Result result = await applicationService.ProcessSaleTransaction((TestData.EstateId, TestData.MerchantId), TestData.TransactionDateTime, TestData.TransactionNumber, TestData.DeviceIdentifier, - TestData.OperatorId, TestData.CustomerEmailAddress, - TestData.ContractId, - TestData.ProductId, + (TestData.OperatorId, TestData.ContractId, TestData.ProductId), TestData.AdditionalRequestMetadata, CancellationToken.None); @@ -257,15 +248,12 @@ public async Task TransactionProcessorACLApplicationService_ProcessSaleTransacti .ReturnsAsync(Result.Failure()); securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.TokenResponse)); - Result result = await applicationService.ProcessSaleTransaction(TestData.EstateId, - TestData.MerchantId, + Result result = await applicationService.ProcessSaleTransaction((TestData.EstateId, TestData.MerchantId), TestData.TransactionDateTime, TestData.TransactionNumber, TestData.DeviceIdentifier, - TestData.OperatorId, TestData.CustomerEmailAddress, - TestData.ContractId, - TestData.ProductId, + (TestData.OperatorId, TestData.ContractId, TestData.ProductId), TestData.AdditionalRequestMetadata, CancellationToken.None); @@ -279,15 +267,12 @@ public async Task TransactionProcessorACLApplicationService_ProcessSaleTransacti .ThrowsAsync(new Exception("Error")); securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.TokenResponse)); - Result result = await applicationService.ProcessSaleTransaction(TestData.EstateId, - TestData.MerchantId, + Result result = await applicationService.ProcessSaleTransaction((TestData.EstateId, TestData.MerchantId), TestData.TransactionDateTime, TestData.TransactionNumber, TestData.DeviceIdentifier, - TestData.OperatorId, TestData.CustomerEmailAddress, - TestData.ContractId, - TestData.ProductId, + (TestData.OperatorId, TestData.ContractId, TestData.ProductId), TestData.AdditionalRequestMetadata, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); diff --git a/TransactionProcessorACL.BusinessLogic/RequestHandlers/ProcessLogonTransactionRequestHandler.cs b/TransactionProcessorACL.BusinessLogic/RequestHandlers/ProcessLogonTransactionRequestHandler.cs index c70025e..0c018da 100644 --- a/TransactionProcessorACL.BusinessLogic/RequestHandlers/ProcessLogonTransactionRequestHandler.cs +++ b/TransactionProcessorACL.BusinessLogic/RequestHandlers/ProcessLogonTransactionRequestHandler.cs @@ -64,15 +64,12 @@ public async Task> Handle(TransactionComma public async Task> Handle(TransactionCommands.ProcessSaleTransactionCommand command, CancellationToken cancellationToken) { - return await this.ApplicationService.ProcessSaleTransaction(command.EstateId, - command.MerchantId, + return await this.ApplicationService.ProcessSaleTransaction((command.EstateId, command.MerchantId), command.TransactionDateTime, command.TransactionNumber, command.DeviceIdentifier, - command.OperatorId, command.CustomerEmailAddress, - command.ContractId, - command.ProductId, + (command.OperatorId, command.ContractId, command.ProductId), command.AdditionalRequestMetadata, cancellationToken); } diff --git a/TransactionProcessorACL.BusinessLogic/Services/ITransactionProcessorACLApplicationService.cs b/TransactionProcessorACL.BusinessLogic/Services/ITransactionProcessorACLApplicationService.cs index c1f4f15..007c102 100644 --- a/TransactionProcessorACL.BusinessLogic/Services/ITransactionProcessorACLApplicationService.cs +++ b/TransactionProcessorACL.BusinessLogic/Services/ITransactionProcessorACLApplicationService.cs @@ -22,17 +22,13 @@ Task> ProcessLogonTransaction(Guid estat String deviceIdentifier, CancellationToken cancellationToken); - Task> ProcessSaleTransaction(Guid estateId, - Guid merchantId, - DateTime transactionDateTime, - String transactionNumber, - String deviceIdentifier, - Guid operatorId, - String customerEmailAddress, - Guid contractId, - Guid productId, - Dictionary additionalRequestMetadata, - CancellationToken cancellationToken); + Task> ProcessSaleTransaction((Guid estateId, Guid merchantId) merchantData, + DateTime transactionDateTime, + String transactionNumber, + String deviceIdentifier, + String customerEmailAddress, + (Guid operatorId, Guid contractId, Guid productId) productData, + Dictionary additionalRequestMetadata, CancellationToken cancellationToken); Task> ProcessReconciliation(Guid estateId, Guid merchantId, diff --git a/TransactionProcessorACL.BusinessLogic/Services/TransactionProcessorACLApplicationService.cs b/TransactionProcessorACL.BusinessLogic/Services/TransactionProcessorACLApplicationService.cs index b9dd723..d75f168 100644 --- a/TransactionProcessorACL.BusinessLogic/Services/TransactionProcessorACLApplicationService.cs +++ b/TransactionProcessorACL.BusinessLogic/Services/TransactionProcessorACLApplicationService.cs @@ -112,14 +112,12 @@ public async Task> ProcessLogonTransacti /// The additional request metadata. /// The cancellation token. /// - public async Task> ProcessSaleTransaction(Guid estateId, - Guid merchantId, + public async Task> ProcessSaleTransaction((Guid estateId, Guid merchantId) merchantData, DateTime transactionDateTime, String transactionNumber, String deviceIdentifier, - Guid operatorId, String customerEmailAddress, - Guid contractId, Guid productId, + (Guid operatorId, Guid contractId, Guid productId) productData, Dictionary additionalRequestMetadata, CancellationToken cancellationToken) { Result accessTokenResult = await this.GetAccessToken(cancellationToken); @@ -132,13 +130,13 @@ public async Task> ProcessSaleTransaction SaleTransactionRequest saleTransactionRequest = this.BuildSaleTransactionRequest(transactionNumber, deviceIdentifier, transactionDateTime, - operatorId, + productData.operatorId, customerEmailAddress, - contractId, - productId, + productData.contractId, + productData.productId, additionalRequestMetadata); - SerialisedMessage requestSerialisedMessage = this.BuildSaleTransactionSerialisedMessage(estateId, merchantId, saleTransactionRequest); + SerialisedMessage requestSerialisedMessage = this.BuildSaleTransactionSerialisedMessage(merchantData.estateId, merchantData.merchantId, saleTransactionRequest); ProcessSaleTransactionResponse response = null; @@ -152,11 +150,11 @@ public async Task> ProcessSaleTransaction SaleTransactionResponse saleTransactionResponse = JsonConvert.DeserializeObject(responseSerialisedMessage.SerialisedData); - response = this.CreateSaleTransactionResponse(saleTransactionResponse, estateId, merchantId); + response = this.CreateSaleTransactionResponse(saleTransactionResponse, merchantData.estateId, merchantData.merchantId); } catch (Exception ex) { - response = this.CreateSaleTransactionErrorResponse(estateId, merchantId, ex); + response = this.CreateSaleTransactionErrorResponse(merchantData.estateId, merchantData.merchantId, ex); } return Result.Success(response);