Skip to content
Merged
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
61 changes: 44 additions & 17 deletions TransactionProcessor.Aggregates/TransactionAggregate.cs
Original file line number Diff line number Diff line change
Expand Up @@ -501,6 +501,43 @@
Guid merchantId,
String deviceIdentifier,
Decimal? transactionAmount)
{
Result result = ValidateStartTransactionArguments(transactionDateTime,
transactionNumber,
transactionType,
transactionReference,
estateId,
merchantId,
deviceIdentifier);
if (result.IsFailed)
return result;

result = CheckCanStartTransaction(aggregate);
if (result.IsFailed)
return result;

TransactionDomainEvents.TransactionHasStartedEvent transactionHasStartedEvent = new(aggregate.AggregateId,
estateId,
merchantId,
transactionDateTime,
transactionNumber,
transactionType.ToString(),
transactionReference,
deviceIdentifier,
transactionAmount);

aggregate.ApplyAndAppend(transactionHasStartedEvent);

return Result.Success();
}

private static Result ValidateStartTransactionArguments(DateTime transactionDateTime,

Check warning on line 534 in TransactionProcessor.Aggregates/TransactionAggregate.cs

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

TransactionProcessor.Aggregates/TransactionAggregate.cs#L534

Method TransactionAggregateExtensions::ValidateStartTransactionArguments has a cyclomatic complexity of 9 (limit is 8)
String transactionNumber,
TransactionType transactionType,
String transactionReference,
Guid estateId,
Guid merchantId,
String deviceIdentifier)
{
if (transactionDateTime == DateTime.MinValue)
return Result.Invalid($"Transaction Date Time must not be [{DateTime.MinValue}]");
Expand All @@ -523,26 +560,16 @@
if (String.IsNullOrEmpty(deviceIdentifier))
return Result.Invalid("Device Identifier must not be null or empty");

return Result.Success();
}

private static Result CheckCanStartTransaction(TransactionAggregate aggregate)
{
Result result = aggregate.CheckTransactionNotAlreadyStarted();
if (result.IsFailed)
return result;
result = aggregate.CheckTransactionNotAlreadyCompleted();
if (result.IsFailed)
return result;

TransactionDomainEvents.TransactionHasStartedEvent transactionHasStartedEvent = new(aggregate.AggregateId,
estateId,
merchantId,
transactionDateTime,
transactionNumber,
transactionType.ToString(),
transactionReference,
deviceIdentifier,
transactionAmount);

aggregate.ApplyAndAppend(transactionHasStartedEvent);

return Result.Success();
return aggregate.CheckTransactionNotAlreadyCompleted();
}

public static Result RecordCostPrice(this TransactionAggregate aggregate, Decimal unitCost, Decimal totalCost){
Expand Down Expand Up @@ -967,4 +994,4 @@

#endregion
}
}
}
Loading