Skip to content

Commit 0b26259

Browse files
Reconciliation Message support added
1 parent 2c01550 commit 0b26259

File tree

37 files changed

+3101
-144
lines changed

37 files changed

+3101
-144
lines changed

TransactionProcessor.BusinessLogic.Tests/RequestHandler/TransactionRequestHandlerTests.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,5 +44,20 @@ public void TransactionRequestHandler_ProcessSaleTransactionRequest_IsHandled()
4444
});
4545

4646
}
47+
48+
[Fact]
49+
public void TransactionRequestHandler_ProcessReconciliationRequest_IsHandled()
50+
{
51+
Mock<ITransactionDomainService> transactionDomainService = new Mock<ITransactionDomainService>();
52+
TransactionRequestHandler handler = new TransactionRequestHandler(transactionDomainService.Object);
53+
54+
ProcessReconciliationRequest command = TestData.ProcessReconciliationRequest;
55+
56+
Should.NotThrow(async () =>
57+
{
58+
await handler.Handle(command, CancellationToken.None);
59+
});
60+
61+
}
4762
}
4863
}

TransactionProcessor.BusinessLogic.Tests/Requests/RequestTests.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,5 +53,26 @@ public void ProcessSaleTransactionRequest_CanBeCreated_IsCreated()
5353
processSaleTransactionRequest.ContractId.ShouldBe(TestData.ContractId);
5454
processSaleTransactionRequest.ProductId.ShouldBe(TestData.ProductId);
5555
}
56+
57+
[Fact]
58+
public void ProcessReconciliationRequest_CanBeCreated_IsCreated()
59+
{
60+
ProcessReconciliationRequest processReconciliationRequest = ProcessReconciliationRequest.Create(TestData.TransactionId,
61+
TestData.EstateId,
62+
TestData.MerchantId,
63+
TestData.DeviceIdentifier,
64+
TestData.TransactionDateTime,
65+
TestData.ReconciliationTransactionCount,
66+
TestData.ReconciliationTransactionValue);
67+
68+
processReconciliationRequest.ShouldNotBeNull();
69+
processReconciliationRequest.EstateId.ShouldBe(TestData.EstateId);
70+
processReconciliationRequest.MerchantId.ShouldBe(TestData.MerchantId);
71+
processReconciliationRequest.DeviceIdentifier.ShouldBe(TestData.DeviceIdentifier);
72+
processReconciliationRequest.TransactionDateTime.ShouldBe(TestData.TransactionDateTime);
73+
processReconciliationRequest.TransactionCount.ShouldBe(TestData.ReconciliationTransactionCount);
74+
processReconciliationRequest.TransactionValue.ShouldBe(TestData.ReconciliationTransactionValue);
75+
processReconciliationRequest.TransactionId.ShouldBe(TestData.TransactionId);
76+
}
5677
}
5778
}

TransactionProcessor.BusinessLogic.Tests/Services/TransactionDomainServiceTests.cs

Lines changed: 299 additions & 20 deletions
Large diffs are not rendered by default.

TransactionProcessor.BusinessLogic/RequestHandlers/TransactionRequestHandler.cs

Lines changed: 51 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,14 @@
1010
/// <summary>
1111
///
1212
/// </summary>
13+
/// <seealso cref="MediatR.IRequestHandler{TransactionProcessor.BusinessLogic.Requests.ProcessLogonTransactionRequest, TransactionProcessor.Models.ProcessLogonTransactionResponse}" />
14+
/// <seealso cref="MediatR.IRequestHandler{TransactionProcessor.BusinessLogic.Requests.ProcessSaleTransactionRequest, TransactionProcessor.Models.ProcessSaleTransactionResponse}" />
15+
/// <seealso cref="MediatR.IRequestHandler{TransactionProcessor.BusinessLogic.Requests.ProcessReconciliationRequest, TransactionProcessor.BusinessLogic.Requests.ProcessReconciliationResponse}" />
1316
/// <seealso cref="MediatR.IRequestHandler{ProcessLogonTransactionRequest, ProcessLogonTransactionResponse}" />
1417
/// <seealso cref="" />
1518
public class TransactionRequestHandler : IRequestHandler<ProcessLogonTransactionRequest, ProcessLogonTransactionResponse>,
16-
IRequestHandler<ProcessSaleTransactionRequest, ProcessSaleTransactionResponse>
19+
IRequestHandler<ProcessSaleTransactionRequest, ProcessSaleTransactionResponse>,
20+
IRequestHandler<ProcessReconciliationRequest, ProcessReconciliationTransactionResponse>
1721
{
1822
#region Fields
1923

@@ -26,6 +30,10 @@ public class TransactionRequestHandler : IRequestHandler<ProcessLogonTransaction
2630

2731
#region Constructors
2832

33+
/// <summary>
34+
/// Initializes a new instance of the <see cref="TransactionRequestHandler"/> class.
35+
/// </summary>
36+
/// <param name="transactionDomainService">The transaction domain service.</param>
2937
public TransactionRequestHandler(ITransactionDomainService transactionDomainService)
3038
{
3139
this.TransactionDomainService = transactionDomainService;
@@ -40,7 +48,9 @@ public TransactionRequestHandler(ITransactionDomainService transactionDomainServ
4048
/// </summary>
4149
/// <param name="request">The request.</param>
4250
/// <param name="cancellationToken">The cancellation token.</param>
43-
/// <returns></returns>
51+
/// <returns>
52+
/// Response from the request
53+
/// </returns>
4454
public async Task<ProcessLogonTransactionResponse> Handle(ProcessLogonTransactionRequest request,
4555
CancellationToken cancellationToken)
4656
{
@@ -56,31 +66,56 @@ await this.TransactionDomainService.ProcessLogonTransaction(request.TransactionI
5666
return logonResponse;
5767
}
5868

59-
#endregion
60-
6169
/// <summary>
6270
/// Handles the specified request.
6371
/// </summary>
6472
/// <param name="request">The request.</param>
6573
/// <param name="cancellationToken">The cancellation token.</param>
66-
/// <returns></returns>
74+
/// <returns>
75+
/// Response from the request
76+
/// </returns>
6777
public async Task<ProcessSaleTransactionResponse> Handle(ProcessSaleTransactionRequest request,
6878
CancellationToken cancellationToken)
6979
{
7080
ProcessSaleTransactionResponse saleResponse = await this.TransactionDomainService.ProcessSaleTransaction(request.TransactionId,
71-
request.EstateId,
72-
request.MerchantId,
73-
request.TransactionDateTime,
74-
request.TransactionNumber,
75-
request.DeviceIdentifier,
76-
request.OperatorIdentifier,
77-
request.CustomerEmailAddress,
78-
request.AdditionalTransactionMetadata,
79-
request.ContractId,
80-
request.ProductId,
81-
cancellationToken);
81+
request.EstateId,
82+
request.MerchantId,
83+
request.TransactionDateTime,
84+
request.TransactionNumber,
85+
request.DeviceIdentifier,
86+
request.OperatorIdentifier,
87+
request.CustomerEmailAddress,
88+
request.AdditionalTransactionMetadata,
89+
request.ContractId,
90+
request.ProductId,
91+
cancellationToken);
8292

8393
return saleResponse;
8494
}
95+
96+
/// <summary>
97+
/// Handles a request
98+
/// </summary>
99+
/// <param name="request">The request</param>
100+
/// <param name="cancellationToken">Cancellation token</param>
101+
/// <returns>
102+
/// Response from the request
103+
/// </returns>
104+
public async Task<ProcessReconciliationTransactionResponse> Handle(ProcessReconciliationRequest request,
105+
CancellationToken cancellationToken)
106+
{
107+
ProcessReconciliationTransactionResponse reconciliationResponse= await this.TransactionDomainService.ProcessReconciliationTransaction(request.TransactionId,
108+
request.EstateId,
109+
request.MerchantId,
110+
request.DeviceIdentifier,
111+
request.TransactionDateTime,
112+
request.TransactionCount,
113+
request.TransactionValue,
114+
cancellationToken);
115+
116+
return reconciliationResponse;
117+
}
118+
119+
#endregion
85120
}
86121
}
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
5+
namespace TransactionProcessor.BusinessLogic.Requests
6+
{
7+
using System.Diagnostics.CodeAnalysis;
8+
using MediatR;
9+
using Models;
10+
11+
public class ProcessReconciliationRequest : IRequest<ProcessReconciliationTransactionResponse>
12+
{
13+
/// <summary>
14+
/// Initializes a new instance of the <see cref="ProcessReconciliationRequest"/> class.
15+
/// </summary>
16+
/// <param name="transactionId">The transaction identifier.</param>
17+
/// <param name="estateId">The estate identifier.</param>
18+
/// <param name="merchantId">The merchant identifier.</param>
19+
/// <param name="deviceIdentifier">The device identifier.</param>
20+
/// <param name="transactionDateTime">The transaction date time.</param>
21+
/// <param name="transactionCount">The transaction count.</param>
22+
/// <param name="transactionValue">The transaction value.</param>
23+
private ProcessReconciliationRequest(Guid transactionId,
24+
Guid estateId,
25+
Guid merchantId,
26+
String deviceIdentifier,
27+
DateTime transactionDateTime,
28+
Int32 transactionCount,
29+
Decimal transactionValue)
30+
{
31+
this.TransactionId = transactionId;
32+
this.EstateId = estateId;
33+
this.MerchantId = merchantId;
34+
this.DeviceIdentifier = deviceIdentifier;
35+
this.TransactionDateTime = transactionDateTime;
36+
this.TransactionCount = transactionCount;
37+
this.TransactionValue = transactionValue;
38+
}
39+
40+
/// <summary>
41+
/// Gets the transaction identifier.
42+
/// </summary>
43+
/// <value>
44+
/// The transaction identifier.
45+
/// </value>
46+
public Guid TransactionId { get; }
47+
48+
/// <summary>
49+
/// Gets the estate identifier.
50+
/// </summary>
51+
/// <value>
52+
/// The estate identifier.
53+
/// </value>
54+
public Guid EstateId { get; }
55+
56+
/// <summary>
57+
/// Gets the merchant identifier.
58+
/// </summary>
59+
/// <value>
60+
/// The merchant identifier.
61+
/// </value>
62+
public Guid MerchantId { get; }
63+
64+
public String DeviceIdentifier { get; }
65+
66+
public DateTime TransactionDateTime { get; }
67+
68+
public Int32 TransactionCount { get; }
69+
70+
public Decimal TransactionValue { get; }
71+
72+
public static ProcessReconciliationRequest Create(Guid transactionId,
73+
Guid estateId,
74+
Guid merchantId,
75+
String deviceIdentifier,
76+
DateTime transactionDateTime,
77+
Int32 transactionCount,
78+
Decimal transactionValue)
79+
{
80+
return new ProcessReconciliationRequest(transactionId, estateId, merchantId, deviceIdentifier, transactionDateTime, transactionCount, transactionValue);
81+
}
82+
}
83+
}

TransactionProcessor.BusinessLogic/Services/ITransactionDomainService.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,27 @@ Task<ProcessSaleTransactionResponse> ProcessSaleTransaction(Guid transactionId,
6161
Guid productId,
6262
CancellationToken cancellationToken);
6363

64+
/// <summary>
65+
/// Processes the reconciliation transaction.
66+
/// </summary>
67+
/// <param name="transactionId">The transaction identifier.</param>
68+
/// <param name="estateId">The estate identifier.</param>
69+
/// <param name="merchantId">The merchant identifier.</param>
70+
/// <param name="deviceIdentifier">The device identifier.</param>
71+
/// <param name="transactionDateTime">The transaction date time.</param>
72+
/// <param name="transactionCount">The transaction count.</param>
73+
/// <param name="transactionValue">The transaction value.</param>
74+
/// <param name="cancellationToken">The cancellation token.</param>
75+
/// <returns></returns>
76+
Task<ProcessReconciliationTransactionResponse> ProcessReconciliationTransaction(Guid transactionId,
77+
Guid estateId,
78+
Guid merchantId,
79+
String deviceIdentifier,
80+
DateTime transactionDateTime,
81+
Int32 transactionCount,
82+
Decimal transactionValue,
83+
CancellationToken cancellationToken);
84+
6485
#endregion
6586
}
6687
}

0 commit comments

Comments
 (0)