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
44 changes: 30 additions & 14 deletions TransactionProcessor.Aggregates/TransactionAggregate.cs
Original file line number Diff line number Diff line change
Expand Up @@ -540,23 +540,18 @@ private static Result ValidateStartTransactionArguments(DateTime transactionDate
String transactionReference,
TransactionStartContext transactionStartContext)
{
if (transactionStartContext == null)
return Result.Invalid("Transaction Start Context must not be null");
var result = ValidateContext(transactionStartContext);
if (result.IsFailed) return result;

if (transactionDateTime == DateTime.MinValue)
return Result.Invalid($"Transaction Date Time must not be [{DateTime.MinValue}]");
if (String.IsNullOrEmpty(transactionNumber))
return Result.Invalid("Transaction Number must not be null or empty");
if (String.IsNullOrEmpty(transactionReference))
return Result.Invalid("Transaction Reference must not be null or empty");

if (Int32.TryParse(transactionNumber, out Int32 _) == false) {
return Result.Invalid("Transaction Number must be numeric");
}
result = ValidateCoreFields(transactionDateTime, transactionNumber, transactionReference, transactionType);
if (result.IsFailed) return result;

if (Enum.IsDefined(typeof(TransactionType), transactionType) == false)
return Result.Invalid("Transaction Type not valid");
return Result.Success();
}

private static Result ValidateContext(TransactionStartContext transactionStartContext) {
if (transactionStartContext == null)
return Result.Invalid("Transaction Start Context must not be null");
if (transactionStartContext.EstateId == Guid.Empty)
return Result.Invalid($"Estate Id must not be [{Guid.Empty}]");
if (transactionStartContext.MerchantId == Guid.Empty)
Expand All @@ -567,6 +562,27 @@ private static Result ValidateStartTransactionArguments(DateTime transactionDate
return Result.Success();
}

private static Result ValidateCoreFields(DateTime dateTime, string number, string reference, TransactionType transactionType)
{
if (dateTime == DateTime.MinValue)
return Result.Invalid($"Transaction Date Time must not be [{DateTime.MinValue}]");

if (string.IsNullOrEmpty(number))
return Result.Invalid("Transaction Number must not be null or empty");

if (!int.TryParse(number, out _))
return Result.Invalid("Transaction Number must be numeric");

if (string.IsNullOrEmpty(reference))
return Result.Invalid("Transaction Reference must not be null or empty");

if (Enum.IsDefined(typeof(TransactionType), transactionType) == false)
return Result.Invalid("Transaction Type not valid");

return Result.Success();
}


private static Result CheckCanStartTransaction(TransactionAggregate aggregate)
{
Result result = aggregate.CheckTransactionNotAlreadyStarted();
Expand Down
Loading