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
145 changes: 0 additions & 145 deletions TransactionProcessor.BusinessLogic/Common/PolicyFactory.cs

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using Shared.Results;
using TransactionProcessor.BusinessLogic.Common;
using TransactionProcessor.BusinessLogic.Requests;
using TransactionProcessor.BusinessLogic.Services;
Expand Down Expand Up @@ -109,7 +110,7 @@ private async Task<Result> HandleSpecificDomainEvent(MerchantStatementDomainEven

private async Task<Result> HandleSpecificDomainEvent(TransactionDomainEvents.TransactionHasBeenCompletedEvent domainEvent,
CancellationToken cancellationToken) {
IAsyncPolicy<Result> retryPolicy = PolicyFactory.CreatePolicy(policyTag: "MerchantStatementDomainEventHandler - HandleSpecificDomainEvent<SettlementDomainEvents.TransactionHasBeenCompletedEvent>");
IAsyncPolicy<Result> retryPolicy = PolicyFactory.CreatePolicy<Result>(policyTag: "MerchantStatementDomainEventHandler - HandleSpecificDomainEvent<SettlementDomainEvents.TransactionHasBeenCompletedEvent>");

try
{
Expand Down Expand Up @@ -158,7 +159,7 @@ private async Task<Result> HandleSpecificDomainEvent(MerchantDomainEvents.Withdr
private async Task<Result> HandleSpecificDomainEvent(SettlementDomainEvents.MerchantFeeSettledEvent domainEvent,
CancellationToken cancellationToken)
{
IAsyncPolicy<Result> retryPolicy = PolicyFactory.CreatePolicy(policyTag: "MerchantStatementDomainEventHandler - HandleSpecificDomainEvent<SettlementDomainEvents.MerchantFeeSettledEvent>");
IAsyncPolicy<Result> retryPolicy = PolicyFactory.CreatePolicy<Result>(policyTag: "MerchantStatementDomainEventHandler - HandleSpecificDomainEvent<SettlementDomainEvents.MerchantFeeSettledEvent>");

try
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ namespace TransactionProcessor.BusinessLogic.EventHandling;
using Shared.EntityFramework;
using Shared.EventStore.Aggregate;
using Shared.EventStore.EventHandling;
using Shared.General;
using System;
using System.Collections.Generic;
using System.IO.Abstractions;
Expand Down Expand Up @@ -160,8 +161,8 @@ private async Task<Result> HandleSpecificDomainEvent(VoucherDomainEvents.Voucher
{
Body = message,
ConnectionIdentifier = domainEvent.EstateId,
FromAddress = "[email protected]", // TODO: lookup from config
IsHtml = true,
FromAddress = ConfigurationReader.GetValueOrDefault("AppSettings", "FromEmailAddress", "[email protected]"),
IsHtml = true,
MessageId = domainEvent.EventId,
Subject = "Voucher Issue",
ToAddresses = new List<String>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ public async Task<Result> EmailStatement(MerchantStatementCommands.EmailMerchant
{
Body = "<html><body>Please find attached this months statement.</body></html>",
ConnectionIdentifier = command.EstateId,
FromAddress = "[email protected]", // TODO: lookup from config
FromAddress = ConfigurationReader.GetValueOrDefault("AppSettings", "FromEmailAddress", "[email protected]"),
IsHtml = true,
Subject = $"Merchant Statement for {statement.StatementDate}",
ToAddresses = emailAddresses,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,10 @@ public class SettlementDomainService : ISettlementDomainService
public async Task<Result<Guid>> ProcessSettlement(SettlementCommands.ProcessSettlementCommand command,
CancellationToken cancellationToken) {

IAsyncPolicy<Result<Guid>> retryPolicy = PolicyFactory.CreatePolicy<Guid>(policyTag: "SettlementDomainService - ProcessSettlement");
IAsyncPolicy<Result<Guid>> retryPolicy = PolicyFactory.CreatePolicy<Result<Guid>>(policyTag: "SettlementDomainService - ProcessSettlement");

try {
return await PolicyFactory.ExecuteWithPolicyAsync<Guid>(async () => {
return await PolicyFactory.ExecuteWithPolicyAsync(async () => {

Guid settlementAggregateId = Helpers.CalculateSettlementAggregateId(command.SettlementDate, command.MerchantId, command.EstateId);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,9 +109,11 @@ public async Task<Result<TransactionValidationResult>> ValidateReconciliationTra
if (deviceValidationResult.IsFailed) return deviceValidationResult;

// Validate the merchant device
return Result.Success(new TransactionValidationResult(TransactionResponseCode.Success, "SUCCESS"));
return Result.Success(new TransactionValidationResult(TransactionResponseCode.Success, SuccessResponseMessage));
}

private const String SuccessResponseMessage = "SUCCESS";

#endregion

public async Task<Result<TransactionValidationResult>> ValidateSaleTransaction(Guid estateId,
Expand Down Expand Up @@ -156,7 +158,7 @@ public async Task<Result<TransactionValidationResult>> ValidateSaleTransaction(G
if (transactionAmountValidationResult.IsFailed) return transactionAmountValidationResult;

// If we get here everything is good
return Result.Success(new TransactionValidationResult(TransactionResponseCode.Success, "SUCCESS"));
return Result.Success(new TransactionValidationResult(TransactionResponseCode.Success, SuccessResponseMessage));
}

private async Task<Result<TransactionValidationResult<EstateAggregate>>> ValidateEstate(Guid estateId, CancellationToken cancellationToken)
Expand Down Expand Up @@ -186,7 +188,7 @@ private Result<TransactionValidationResult> ValidateEstateOperator(EstateAggrega
Result<TransactionValidationResult> result = estateOperatorRecord switch {
null => CreateFailedResult(new TransactionValidationResult(TransactionResponseCode.OperatorNotValidForEstate, $"Operator {operatorId} not configured for Estate [{estate.EstateName}]")),
_ when estateOperatorRecord.IsDeleted => CreateFailedResult(new TransactionValidationResult(TransactionResponseCode.OperatorNotEnabledForEstate, $"Operator {operatorId} not enabled for Estate [{estate.EstateName}]")),
_ => Result.Success(new TransactionValidationResult(TransactionResponseCode.Success, "SUCCESS"))
_ => Result.Success(new TransactionValidationResult(TransactionResponseCode.Success, SuccessResponseMessage))
};
return result;
}
Expand All @@ -203,7 +205,7 @@ private async Task<Result<TransactionValidationResult<MerchantAggregate>>> Valid
};
return CreateFailedResult(new TransactionValidationResult<MerchantAggregate>(transactionValidationResult));
}
return Result.Success(new TransactionValidationResult<MerchantAggregate>(new TransactionValidationResult(TransactionResponseCode.Success, "SUCCESS"), getMerchantResult.Data));
return Result.Success(new TransactionValidationResult<MerchantAggregate>(new TransactionValidationResult(TransactionResponseCode.Success, SuccessResponseMessage), getMerchantResult.Data));

}

Expand All @@ -220,14 +222,14 @@ private Result<TransactionValidationResult> ValidateDevice(Models.Merchant.Merch
return CreateFailedResult(new TransactionValidationResult(TransactionResponseCode.InvalidDeviceIdentifier, $"Device Identifier {deviceIdentifier} not valid for Merchant {merchant.MerchantName}"));
}

return Result.Success(new TransactionValidationResult(TransactionResponseCode.Success, "SUCCESS"));
return Result.Success(new TransactionValidationResult(TransactionResponseCode.Success, SuccessResponseMessage));
}

private Result<TransactionValidationResult> ValidateDeviceForLogon(Models.Merchant.Merchant merchant, String deviceIdentifier)
{
if (merchant.Devices == null || !merchant.Devices.Any())
{
return Result.Success(new TransactionValidationResult(TransactionResponseCode.SuccessNeedToAddDevice,"SUCCESS"));
return Result.Success(new TransactionValidationResult(TransactionResponseCode.SuccessNeedToAddDevice,SuccessResponseMessage));
}

Device device = merchant.Devices.SingleOrDefault(d => d.DeviceIdentifier == deviceIdentifier);
Expand All @@ -236,7 +238,7 @@ private Result<TransactionValidationResult> ValidateDeviceForLogon(Models.Mercha
return CreateFailedResult(new TransactionValidationResult(TransactionResponseCode.InvalidDeviceIdentifier, $"Device Identifier {deviceIdentifier} not valid for Merchant {merchant.MerchantName}"));
}

return Result.Success(new TransactionValidationResult(TransactionResponseCode.Success, "SUCCESS"));
return Result.Success(new TransactionValidationResult(TransactionResponseCode.Success, SuccessResponseMessage));
}

private Result<TransactionValidationResult> ValidateMerchantOperator(Models.Merchant.Merchant merchant, Guid operatorId)
Expand All @@ -252,7 +254,7 @@ private Result<TransactionValidationResult> ValidateMerchantOperator(Models.Merc
{
null => CreateFailedResult(new TransactionValidationResult(TransactionResponseCode.OperatorNotValidForMerchant, $"Operator {operatorId} not configured for Merchant [{merchant.MerchantName}]")),
_ when merchantOperatorRecord.IsDeleted => CreateFailedResult(new TransactionValidationResult(TransactionResponseCode.OperatorNotEnabledForMerchant, $"Operator {operatorId} not enabled for Merchant [{merchant.MerchantName}]")),
_ => Result.Success(new TransactionValidationResult(TransactionResponseCode.Success, "SUCCESS"))
_ => Result.Success(new TransactionValidationResult(TransactionResponseCode.Success, SuccessResponseMessage))
};
return result;
}
Expand Down Expand Up @@ -287,7 +289,7 @@ private Result<TransactionValidationResult> ValidateContractAndProduct(Models.Me
return CreateFailedResult(new TransactionValidationResult(TransactionResponseCode.ProductNotValidForMerchant, $"Product Id [{productId}] not valid for Merchant [{merchant.MerchantName}]"));
}

return Result.Success(new TransactionValidationResult(TransactionResponseCode.Success, "SUCCESS"));
return Result.Success(new TransactionValidationResult(TransactionResponseCode.Success, SuccessResponseMessage));
}

private async Task<Result<TransactionValidationResult>> ValidateTransactionAmount(Guid merchantId, String merchantName, Decimal? transactionAmount, CancellationToken cancellationToken)
Expand All @@ -309,7 +311,7 @@ private async Task<Result<TransactionValidationResult>> ValidateTransactionAmoun
return CreateFailedResult(new TransactionValidationResult(TransactionResponseCode.MerchantDoesNotHaveEnoughCredit, $"Merchant [{merchantName}] does not have enough credit available [{projectionState.merchant.balance:0.00}] to perform transaction amount [{transactionAmount}]"));
}

return Result.Success(new TransactionValidationResult(TransactionResponseCode.Success, "SUCCESS"));
return Result.Success(new TransactionValidationResult(TransactionResponseCode.Success, SuccessResponseMessage));
}
}

Expand Down
4 changes: 2 additions & 2 deletions TransactionProcessor.DataTransferObjects/MetadataContants.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,12 @@ public static class MetadataContants
/// <summary>
/// The key name estate identifier
/// </summary>
public const String KeyNameEstateId = "estate_id";
public static readonly String KeyNameEstateId = "estate_id";

/// <summary>
/// The key name merchant identifier
/// </summary>
public const String KeyNameMerchantId = "merchant_id";
public static readonly String KeyNameMerchantId = "merchant_id";

#endregion
}
Expand Down
12 changes: 8 additions & 4 deletions TransactionProcessor/Bootstrapper/MiddlewareRegistry.cs
Original file line number Diff line number Diff line change
Expand Up @@ -95,16 +95,16 @@ public MiddlewareRegistry()
chain,
sslPolicyErrors) => true
};
options.Authority = ConfigurationReader.GetValue("SecurityConfiguration", "Authority");
options.Audience = ConfigurationReader.GetValue("SecurityConfiguration", "ApiName");
options.Authority = GetSecurityServiceConfigValue("Authority");
options.Audience = GetSecurityServiceConfigValue("ApiName");

options.TokenValidationParameters = new TokenValidationParameters
{
ValidateAudience = false,
ValidAudience =
ConfigurationReader.GetValue("SecurityConfiguration", "ApiName"),
GetSecurityServiceConfigValue("ApiName"),
ValidIssuer =
ConfigurationReader.GetValue("SecurityConfiguration", "Authority"),
GetSecurityServiceConfigValue("Authority"),
};
options.IncludeErrorDetails = true;
});
Expand All @@ -124,6 +124,10 @@ public MiddlewareRegistry()

#endregion

private String GetSecurityServiceConfigValue(String keyName) {
return ConfigurationReader.GetValue("SecurityConfiguration", keyName);
}

#region Methods

/// <summary>
Expand Down
Loading