Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ public void ReconciliationAggregate_Authorise_ReconciliationIsAuthorised()
Result result = reconciliationAggregate.Authorise(TestData.ResponseCode, TestData.ResponseMessage);
result.IsSuccess.ShouldBeTrue();

reconciliationAggregate.ResponseCode.ShouldBe(TestData.ResponseCode);
reconciliationAggregate.ResponseCode.ShouldBe(TestData.ResponseCode.ToCodeString());
reconciliationAggregate.ResponseMessage.ShouldBe(TestData.ResponseMessage);
reconciliationAggregate.IsAuthorised.ShouldBeTrue();
}
Expand Down Expand Up @@ -186,7 +186,7 @@ public void ReconciliationAggregate_Decline_ReconciliationIsDeclined()
Result result = reconciliationAggregate.Decline(TestData.ResponseCode, TestData.ResponseMessage);
result.IsSuccess.ShouldBeTrue();

reconciliationAggregate.ResponseCode.ShouldBe(TestData.ResponseCode);
reconciliationAggregate.ResponseCode.ShouldBe(TestData.ResponseCode.ToCodeString());
reconciliationAggregate.ResponseMessage.ShouldBe(TestData.ResponseMessage);
reconciliationAggregate.IsAuthorised.ShouldBeFalse();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -378,7 +378,7 @@ public void TransactionAggregate_AuthoriseTransactionLocally_TransactionIsAuthor
transactionAggregate.IsLocallyAuthorised.ShouldBeTrue();
transactionAggregate.IsAuthorised.ShouldBeFalse();
transactionAggregate.AuthorisationCode.ShouldBe(TestData.AuthorisationCode);
transactionAggregate.ResponseCode.ShouldBe(TestData.ResponseCode);
transactionAggregate.ResponseCode.ShouldBe(TestData.ResponseCode.ToCodeString());
transactionAggregate.ResponseMessage.ShouldBe(TestData.ResponseMessage);
}

Expand Down Expand Up @@ -543,7 +543,7 @@ public void TransactionAggregate_DeclineTransactionLocally_TransactionIsDeclined
transactionAggregate.IsDeclined.ShouldBeFalse();
transactionAggregate.IsLocallyDeclined.ShouldBeTrue();

transactionAggregate.ResponseCode.ShouldBe(TestData.DeclinedResponseCode);
transactionAggregate.ResponseCode.ShouldBe(TestData.DeclinedResponseCode.ToCodeString());
transactionAggregate.ResponseMessage.ShouldBe(TestData.DeclinedResponseMessage);
}

Expand Down
8 changes: 4 additions & 4 deletions TransactionProcessor.Aggregates/ReconciliationAggregate.cs
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ public static Result RecordOverallTotals(this ReconciliationAggregate aggregate,
return Result.Success();
}

public static Result Authorise(this ReconciliationAggregate aggregate, String responseCode, String responseMessage)
public static Result Authorise(this ReconciliationAggregate aggregate, TransactionResponseCode responseCode, String responseMessage)
{
if (aggregate.IsAuthorised || aggregate.IsDeclined) {
return Result.Success();
Expand All @@ -107,7 +107,7 @@ public static Result Authorise(this ReconciliationAggregate aggregate, String re
return result;

ReconciliationDomainEvents.ReconciliationHasBeenLocallyAuthorisedEvent reconciliationHasBeenLocallyAuthorisedEvent = new(aggregate.AggregateId, aggregate.EstateId, aggregate.MerchantId,
responseCode, responseMessage, aggregate.TransactionDateTime);
responseCode.ToCodeString(), responseMessage, aggregate.TransactionDateTime);

aggregate.ApplyAndAppend(reconciliationHasBeenLocallyAuthorisedEvent);
return Result.Success();
Expand All @@ -122,7 +122,7 @@ private static Result CheckReconciliationHasBeenAuthorisedOrDeclined(this Reconc
return Result.Success();
}

public static Result Decline(this ReconciliationAggregate aggregate,String responseCode, String responseMessage)
public static Result Decline(this ReconciliationAggregate aggregate,TransactionResponseCode responseCode, String responseMessage)
{
if (aggregate.IsAuthorised || aggregate.IsDeclined) {
return Result.Success();
Expand All @@ -136,7 +136,7 @@ public static Result Decline(this ReconciliationAggregate aggregate,String respo
return result;

ReconciliationDomainEvents.ReconciliationHasBeenLocallyDeclinedEvent reconciliationHasBeenLocallyDeclinedEvent = new(aggregate.AggregateId, aggregate.EstateId, aggregate.MerchantId,
responseCode, responseMessage, aggregate.TransactionDateTime);
responseCode.ToCodeString(), responseMessage, aggregate.TransactionDateTime);

aggregate.ApplyAndAppend(reconciliationHasBeenLocallyDeclinedEvent);

Expand Down
57 changes: 48 additions & 9 deletions TransactionProcessor.Aggregates/TransactionAggregate.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,50 @@ namespace TransactionProcessor.Aggregates
using Shared.EventStore.Aggregate;
using Shared.General;

public enum TransactionResponseCode
{
Success = 0,
SuccessNeedToAddDevice = 1,

InvalidDeviceIdentifier = 1000,
InvalidEstateId = 1001,
InvalidMerchantId = 1002,
NoValidDevices = 1003,
NoEstateOperators = 1004,
OperatorNotValidForEstate = 1005,
NoMerchantOperators = 1006,
OperatorNotValidForMerchant = 1007,
TransactionDeclinedByOperator = 1008,
MerchantDoesNotHaveEnoughCredit = 1009,
OperatorCommsError = 1010,
InvalidSaleTransactionAmount = 1011,
InvalidContractIdValue = 1012,
InvalidProductIdValue = 1013,
MerchantHasNoContractsConfigured = 1014,
ContractNotValidForMerchant = 1015,
ProductNotValidForMerchant = 1016,
OperatorNotEnabledForEstate = 1017,
OperatorNotEnabledForMerchant = 1018,

// A Catch All generic Error where reason has not been identified
UnknownFailure = 9999
}

public static class TransactionResponseCodeExtensions
{
public static string ToCodeString(this TransactionResponseCode code)
{
return ((int)code).ToString("D4");
}
}

public static class TransactionAggregateExtensions{

public static Result DeclineTransaction(this TransactionAggregate aggregate,
Guid operatorId,
String operatorResponseCode,
String operatorResponseMessage,
String responseCode,
TransactionResponseCode responseCode,
String responseMessage)
{
Result result = aggregate.CheckTransactionHasBeenStarted();
Expand All @@ -32,23 +69,25 @@ public static Result DeclineTransaction(this TransactionAggregate aggregate,
if (result.IsFailed)
return result;



TransactionDomainEvents.TransactionDeclinedByOperatorEvent transactionDeclinedByOperatorEvent =
new(aggregate.AggregateId,
aggregate.EstateId,
aggregate.MerchantId,
operatorId,
operatorResponseCode,
operatorResponseMessage,
responseCode,
responseCode.ToCodeString(),
responseMessage,
aggregate.TransactionDateTime);
aggregate.ApplyAndAppend(transactionDeclinedByOperatorEvent);

return Result.Success();
}

public static Result DeclineTransactionLocally(this TransactionAggregate aggregate,
String responseCode,
public static Result DeclineTransactionLocally(this TransactionAggregate aggregate,
TransactionResponseCode responseCode,
String responseMessage)
{
Result result = aggregate.CheckTransactionHasBeenStarted();
Expand All @@ -61,7 +100,7 @@ public static Result DeclineTransactionLocally(this TransactionAggregate aggrega
if (result.IsFailed)
return result;
TransactionDomainEvents.TransactionHasBeenLocallyDeclinedEvent transactionHasBeenLocallyDeclinedEvent =
new(aggregate.AggregateId, aggregate.EstateId, aggregate.MerchantId, responseCode, responseMessage,
new(aggregate.AggregateId, aggregate.EstateId, aggregate.MerchantId, responseCode.ToCodeString(), responseMessage,
aggregate.TransactionDateTime);

aggregate.ApplyAndAppend(transactionHasBeenLocallyDeclinedEvent);
Expand Down Expand Up @@ -276,7 +315,7 @@ public static Result AuthoriseTransaction(this TransactionAggregate aggregate,
String operatorResponseCode,
String operatorResponseMessage,
String operatorTransactionId,
String responseCode,
TransactionResponseCode responseCode,
String responseMessage)
{
Result result = aggregate.CheckTransactionHasBeenStarted();
Expand All @@ -294,7 +333,7 @@ public static Result AuthoriseTransaction(this TransactionAggregate aggregate,
operatorResponseCode,
operatorResponseMessage,
operatorTransactionId,
responseCode,
responseCode.ToCodeString(),
responseMessage,
aggregate.TransactionDateTime);
aggregate.ApplyAndAppend(transactionAuthorisedByOperatorEvent);
Expand All @@ -304,7 +343,7 @@ public static Result AuthoriseTransaction(this TransactionAggregate aggregate,

public static Result AuthoriseTransactionLocally(this TransactionAggregate aggregate,
String authorisationCode,
String responseCode,
TransactionResponseCode responseCode,
String responseMessage)
{
var result = aggregate.CheckTransactionHasBeenStarted();
Expand All @@ -317,7 +356,7 @@ public static Result AuthoriseTransactionLocally(this TransactionAggregate aggre
if (result.IsFailed)
return result;
TransactionDomainEvents.TransactionHasBeenLocallyAuthorisedEvent transactionHasBeenLocallyAuthorisedEvent =
new(aggregate.AggregateId, aggregate.EstateId, aggregate.MerchantId, authorisationCode, responseCode, responseMessage,
new(aggregate.AggregateId, aggregate.EstateId, aggregate.MerchantId, authorisationCode, responseCode.ToCodeString(), responseMessage,
aggregate.TransactionDateTime);

aggregate.ApplyAndAppend(transactionHasBeenLocallyAuthorisedEvent);
Expand Down
Loading
Loading