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
41 changes: 41 additions & 0 deletions TransactionProcessor.BusinessLogic/Common/Extensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TransactionProcessor.BusinessLogic.Common
{
using System.Diagnostics.CodeAnalysis;

public static class Extensions
{
/// <summary>
/// Extracts the field from metadata.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="fieldName">Name of the field.</param>
/// <param name="additionalTransactionMetadata">The additional transaction metadata.</param>
/// <returns></returns>
[ExcludeFromCodeCoverage]
public static T ExtractFieldFromMetadata<T>(this Dictionary<String, String> additionalTransactionMetadata, String fieldName)
{
// Create a case insensitive version of the dictionary
Dictionary<String, String> caseInsensitiveDictionary = new Dictionary<String, String>(StringComparer.InvariantCultureIgnoreCase);
foreach (KeyValuePair<String, String> keyValuePair in additionalTransactionMetadata)
{
caseInsensitiveDictionary.Add(keyValuePair.Key, keyValuePair.Value);
}

if (caseInsensitiveDictionary.ContainsKey(fieldName))
{
String fieldData = caseInsensitiveDictionary[fieldName];
return (T)Convert.ChangeType(fieldData, typeof(T));
}
else
{
return default(T);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
using System.Threading.Tasks;
using System.Xml;
using System.Xml.Serialization;
using Common;
using EstateManagement.DataTransferObjects.Responses;

/// <summary>
Expand Down Expand Up @@ -74,8 +75,8 @@ public async Task<OperatorResponse> ProcessSaleMessage(String accessToken,
CancellationToken cancellationToken)
{
// Extract the required fields
String transactionAmount = this.ExtractFieldFromMetadata("Amount", additionalTransactionMetadata);
String customerMsisdn = this.ExtractFieldFromMetadata("CustomerAccountNumber", additionalTransactionMetadata);
String transactionAmount = additionalTransactionMetadata.ExtractFieldFromMetadata<String>("Amount");
String customerMsisdn = additionalTransactionMetadata.ExtractFieldFromMetadata<String>("CustomerAccountNumber");

if (String.IsNullOrEmpty(transactionAmount))
{
Expand Down Expand Up @@ -116,28 +117,6 @@ public async Task<OperatorResponse> ProcessSaleMessage(String accessToken,
return this.CreateFrom(responseContent);
}

[ExcludeFromCodeCoverage]
private String ExtractFieldFromMetadata(String fieldName,
Dictionary<String, String> additionalTransactionMetadata)
{
// Create a case insensitive version of the dictionary
Dictionary<String, String> caseInsensitiveDictionary = new Dictionary<String, String>(StringComparer.InvariantCultureIgnoreCase);
foreach (KeyValuePair<String, String> keyValuePair in additionalTransactionMetadata)
{
caseInsensitiveDictionary.Add(keyValuePair.Key, keyValuePair.Value);
}

if (caseInsensitiveDictionary.ContainsKey(fieldName))
{
return caseInsensitiveDictionary[fieldName];
}
else
{
return String.Empty;
}

}

/// <summary>
/// Builds the request.
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ namespace TransactionProcessor.BusinessLogic.OperatorInterfaces.VoucherManagemen
using System.Security.Policy;
using System.Threading;
using System.Threading.Tasks;
using Common;
using EstateManagement.DataTransferObjects.Responses;
using global::VoucherManagement.Client;
using global::VoucherManagement.DataTransferObjects;
Expand Down Expand Up @@ -58,9 +59,9 @@ public async Task<OperatorResponse> ProcessSaleMessage(String accessToken,
CancellationToken cancellationToken)
{
// Extract the required fields
String recipientEmail = additionalTransactionMetadata.GetValueOrDefault("RecipientEmail");
String recipientMobile = additionalTransactionMetadata.GetValueOrDefault("RecipientMobile");
String transactionAmount = additionalTransactionMetadata.GetValueOrDefault("Amount");
String recipientEmail = additionalTransactionMetadata.ExtractFieldFromMetadata<String>("RecipientEmail");
String recipientMobile = additionalTransactionMetadata.ExtractFieldFromMetadata<String>("RecipientMobile");
String transactionAmount = additionalTransactionMetadata.ExtractFieldFromMetadata<String>("Amount");

// Covert the transaction amount to Decimal and remove decimal places
if (Decimal.TryParse(transactionAmount, out Decimal amountAsDecimal) == false)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Common;
using EstateManagement.Client;
using EstateManagement.DataTransferObjects.Requests;
using EstateManagement.DataTransferObjects.Responses;
Expand Down Expand Up @@ -189,7 +190,7 @@ public async Task<ProcessSaleTransactionResponse> ProcessSaleTransaction(Guid tr
String transactionReference = this.GenerateTransactionReference();

// Extract the transaction amount from the metadata
Decimal transactionAmount = this.ExtractFieldFromMetadata<Decimal>("Amount", additionalTransactionMetadata);
Decimal transactionAmount = additionalTransactionMetadata.ExtractFieldFromMetadata<Decimal>("Amount");

(String responseMessage, TransactionResponseCode responseCode) validationResult =
await this.ValidateSaleTransaction(estateId, merchantId, deviceIdentifier, operatorIdentifier, transactionAmount, cancellationToken);
Expand Down Expand Up @@ -395,35 +396,7 @@ public async Task<ProcessReconciliationTransactionResponse> ProcessReconciliatio
};
}

/// <summary>
/// Extracts the field from metadata.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="fieldName">Name of the field.</param>
/// <param name="additionalTransactionMetadata">The additional transaction metadata.</param>
/// <returns></returns>
[ExcludeFromCodeCoverage]
private T ExtractFieldFromMetadata<T>(String fieldName,
Dictionary<String, String> additionalTransactionMetadata)
{
// Create a case insensitive version of the dictionary
Dictionary<String, String> caseInsensitiveDictionary = new Dictionary<String, String>(StringComparer.InvariantCultureIgnoreCase);
foreach (KeyValuePair<String, String> keyValuePair in additionalTransactionMetadata)
{
caseInsensitiveDictionary.Add(keyValuePair.Key, keyValuePair.Value);
}

if (caseInsensitiveDictionary.ContainsKey(fieldName))
{
String fieldData = caseInsensitiveDictionary[fieldName];
return (T)Convert.ChangeType(fieldData, typeof(T));
}
else
{
return default(T);
}

}


/// <summary>
/// Adds the device to merchant.
Expand Down