diff --git a/CallbackHander.Testing/TestData.cs b/CallbackHander.Testing/TestData.cs index ab8156c..f5f7dee 100644 --- a/CallbackHander.Testing/TestData.cs +++ b/CallbackHander.Testing/TestData.cs @@ -19,7 +19,9 @@ public class TestData public static String[] Destinations = new[] {"A", "B"}; - public static String Reference = "TestRef"; + public static String Reference = "640E863C23E244BDB9717C92733FFD4C-9D20A3961CF645EDAA7BDD436318BA29"; + public static Guid EstateReference = Guid.Parse("640E863C-23E2-44BD-B971-7C92733FFD4C"); + public static Guid MerchantReference = Guid.Parse("9D20A396-1CF6-45ED-AA7B-DD436318BA29"); public static CallbackCommands.RecordCallbackRequest RecordCallbackRequest => new CallbackCommands.RecordCallbackRequest(TestData.CallbackId, @@ -41,7 +43,7 @@ public static CallbackMessageAggregate RecordedCallbackMessageAggregate() { CallbackMessageAggregate aggregate = new CallbackMessageAggregate(); aggregate.RecordCallback(TestData.CallbackId, TestData.TypeString, (MessageFormat)TestData.MessageFormat, - TestData.CallbackMessage, TestData.Reference, TestData.Destinations); + TestData.CallbackMessage, TestData.Reference, TestData.Destinations, EstateReference, MerchantReference); return aggregate; } diff --git a/CallbackHandler.BusinessLogic/Services/CallbackDomainService.cs b/CallbackHandler.BusinessLogic/Services/CallbackDomainService.cs index bb7215b..b74f23e 100644 --- a/CallbackHandler.BusinessLogic/Services/CallbackDomainService.cs +++ b/CallbackHandler.BusinessLogic/Services/CallbackDomainService.cs @@ -26,12 +26,26 @@ public async Task RecordCallback(Guid callbackId, String reference, String[] destinations, CancellationToken cancellationToken) { - var getResult = await this.AggregateRepository.GetLatestVersion(callbackId, cancellationToken); + + // split the reference string into an array of strings + String[] referenceData = reference?.Split(new[] { '-' }, StringSplitOptions.RemoveEmptyEntries) ?? Array.Empty(); + if (referenceData.Length == 0) + { + return Result.Failure("Reference cannot be empty."); + } + // Element 0 is estate reference, Element 1 is merchant reference + String estateReference = referenceData[0]; + String merchantReference = referenceData[1]; + + // TODO: Validate the reference data + + Result getResult = await this.AggregateRepository.GetLatestVersion(callbackId, cancellationToken); Result callbackMessageAggregateResult = DomainServiceHelper.HandleGetAggregateResult(getResult, callbackId, false); CallbackMessageAggregate aggregate = callbackMessageAggregateResult.Data; - aggregate.RecordCallback(callbackId, typeString, messageFormat, callbackMessage, reference, destinations); + aggregate.RecordCallback(callbackId, typeString, messageFormat, callbackMessage, reference, destinations, + Guid.Parse(estateReference), Guid.Parse(merchantReference)); return await this.AggregateRepository.SaveChanges(aggregate, cancellationToken); } diff --git a/CallbackHandler.CallbackMessage.DomainEvents/CallbackReceivedEvent.cs b/CallbackHandler.CallbackMessage.DomainEvents/CallbackReceivedEvent.cs index ac74e91..878bc3e 100644 --- a/CallbackHandler.CallbackMessage.DomainEvents/CallbackReceivedEvent.cs +++ b/CallbackHandler.CallbackMessage.DomainEvents/CallbackReceivedEvent.cs @@ -3,27 +3,12 @@ using System; using Shared.DomainDrivenDesign.EventSourcing; - public record CallbackReceivedEvent : DomainEvent - { - public CallbackReceivedEvent(Guid aggregateId, String typeString, - Int32 messageFormat, - String callbackMessage, - String reference, - String destination) : base(aggregateId, Guid.NewGuid()) - { - this.TypeString = typeString; - this.MessageFormat = messageFormat; - this.CallbackMessage = callbackMessage; - this.Destination = destination; - this.Reference = reference; - } - - public String TypeString { get; init; } - public Int32 MessageFormat { get; init; } - public String CallbackMessage { get; init; } - - public String Reference { get; init; } - - public String Destination { get; init; } - } + public record CallbackReceivedEvent(Guid AggregateId, + String TypeString, + Int32 MessageFormat, + String CallbackMessage, + String Reference, + String Destination, + Guid EstateId, + Guid MerchantId) : DomainEvent(AggregateId, Guid.NewGuid()); } \ No newline at end of file diff --git a/CallbackHandler.CallbackMessageAggregate.Tests/CallbackMessageAggregateTests.cs b/CallbackHandler.CallbackMessageAggregate.Tests/CallbackMessageAggregateTests.cs index ee502bc..1cdb74d 100644 --- a/CallbackHandler.CallbackMessageAggregate.Tests/CallbackMessageAggregateTests.cs +++ b/CallbackHandler.CallbackMessageAggregate.Tests/CallbackMessageAggregateTests.cs @@ -20,7 +20,8 @@ public void CallbackMessageAggregate_RecordCallback_CallbackIsRecorded() { CallbackMessageAggregate aggregate = new CallbackMessageAggregate(); - aggregate.RecordCallback(TestData.CallbackId, TestData.TypeString, MessageFormat.JSON, TestData.CallbackMessage, TestData.Reference, TestData.Destinations); + aggregate.RecordCallback(TestData.CallbackId, TestData.TypeString, MessageFormat.JSON, TestData.CallbackMessage, TestData.Reference, TestData.Destinations, + TestData.EstateReference, TestData.MerchantReference); aggregate.ShouldSatisfyAllConditions(() => aggregate.CallbackMessage.ShouldBe(TestData.CallbackMessage), () => aggregate.TypeString.ShouldBe(TestData.TypeString), diff --git a/CallbackHandler.CallbackMessageAggregate.Tests/DomainEventTests.cs b/CallbackHandler.CallbackMessageAggregate.Tests/DomainEventTests.cs deleted file mode 100644 index 08f1c6c..0000000 --- a/CallbackHandler.CallbackMessageAggregate.Tests/DomainEventTests.cs +++ /dev/null @@ -1,25 +0,0 @@ -namespace CallbackHandler.CallbackMessageAggregate.Tests -{ - using CallbackHander.Testing; - using CallbackMessage.DomainEvents; - using Shouldly; - using Xunit; - - public class DomainEventTests - { - [Fact] - public void CallbackReceivedEvent_CanbeCreated_IsCreated() - { - CallbackReceivedEvent callbackReceivedEvent = - new CallbackReceivedEvent(TestData.CallbackId, TestData.TypeString, TestData.MessageFormat, - TestData.CallbackMessage, TestData.Reference, TestData.Destinations[0]); - - callbackReceivedEvent.ShouldNotBeNull(); - callbackReceivedEvent.ShouldSatisfyAllConditions(() => callbackReceivedEvent.CallbackMessage.ShouldBe(TestData.CallbackMessage), - () => callbackReceivedEvent.TypeString.ShouldBe(TestData.TypeString), - () => callbackReceivedEvent.MessageFormat.ShouldBe(TestData.MessageFormat), - () => callbackReceivedEvent.Reference.ShouldBe(TestData.Reference), - () => callbackReceivedEvent.Destination.ShouldBe(TestData.Destinations[0])); - } - } -} \ No newline at end of file diff --git a/CallbackHandler.CallbackMessageAggregate/CallbackMessageAggregate.cs b/CallbackHandler.CallbackMessageAggregate/CallbackMessageAggregate.cs index 3e8cadd..3bd6d8d 100644 --- a/CallbackHandler.CallbackMessageAggregate/CallbackMessageAggregate.cs +++ b/CallbackHandler.CallbackMessageAggregate/CallbackMessageAggregate.cs @@ -55,12 +55,14 @@ public static void RecordCallback(this CallbackMessageAggregate aggregate, MessageFormat messageFormat, String callbackMessage, String reference, - String[] destinations) + String[] destinations, + Guid estateId,Guid merchantId) { foreach (String destination in destinations) { DomainEvent callbackReceivedEvent = CreateCallbackReceivedEvent(aggregate,aggregateId, typeString, - messageFormat, callbackMessage, reference, destination); + messageFormat, callbackMessage, reference, destination, + estateId, merchantId); aggregate.ApplyAndAppend(callbackReceivedEvent); } @@ -72,12 +74,13 @@ internal static DomainEvent CreateCallbackReceivedEvent(this CallbackMessageAggr MessageFormat messageFormat, String callbackMessage, String reference, - String destination) + String destination, + Guid estateId, Guid merchantId) { return new CallbackReceivedEvent(aggregateId, typeString, (Int32) messageFormat, callbackMessage, reference, - destination); + destination, estateId, merchantId); } public static String[] GetDestinations(this CallbackMessageAggregate aggregate) diff --git a/CallbackHandler.IntegrationTests/Features/BankDepositCallback.feature b/CallbackHandler.IntegrationTests/Features/BankDepositCallback.feature index 76bc031..cbe08de 100644 --- a/CallbackHandler.IntegrationTests/Features/BankDepositCallback.feature +++ b/CallbackHandler.IntegrationTests/Features/BankDepositCallback.feature @@ -4,6 +4,6 @@ Feature: BankDepositCallback Scenario: Process a Bank Deposit Callback Given I have the following Bank Deposit Callbacks | Amount | DateTime | DepositId | HostIdentifier | Reference | SortCode | AccountNumber | - | 100.00 | Today | 6AE04AFC-D7F8-4936-A3A2-DCA177CAA106 | DC4A7DDA-45A1-4D5B-8D46-21FA99A3868E | Deposit1 | 11-22-33 | 12345678 | + | 100.00 | Today | 6AE04AFC-D7F8-4936-A3A2-DCA177CAA106 | DC4A7DDA-45A1-4D5B-8D46-21FA99A3868E | DC4A7DDA45A14D5B8D4621FA99A3868E-6AE04AFCD7F84936A3A2DCA177CAA106 | 11-22-33 | 12345678 | When I send the requests to the callback handler for deposits Then the deposit records are recorded diff --git a/CallbackHandler.IntegrationTests/Features/BankDepositCallback.feature.cs b/CallbackHandler.IntegrationTests/Features/BankDepositCallback.feature.cs index 7e66770..5bd5158 100644 --- a/CallbackHandler.IntegrationTests/Features/BankDepositCallback.feature.cs +++ b/CallbackHandler.IntegrationTests/Features/BankDepositCallback.feature.cs @@ -136,7 +136,7 @@ public void ScenarioInitialize(global::Reqnroll.ScenarioInfo scenarioInfo) "Today", "6AE04AFC-D7F8-4936-A3A2-DCA177CAA106", "DC4A7DDA-45A1-4D5B-8D46-21FA99A3868E", - "Deposit1", + "DC4A7DDA45A14D5B8D4621FA99A3868E-6AE04AFCD7F84936A3A2DCA177CAA106", "11-22-33", "12345678"}); #line 5 diff --git a/CallbackHandler.Tests/CallbackHandler.Tests.csproj b/CallbackHandler.Tests/CallbackHandler.Tests.csproj index 0dea5df..01d72e0 100644 --- a/CallbackHandler.Tests/CallbackHandler.Tests.csproj +++ b/CallbackHandler.Tests/CallbackHandler.Tests.csproj @@ -8,7 +8,7 @@ - +