Files
2026-04-20 14:47:24 -05:00

76 lines
3.0 KiB
C#

using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Net.Http;
using System.Threading.Tasks;
using LCU.API.Collections.RepoApi.Configuration;
using LCU.Shared.Collections.RepoApiLib.Models.Consumer;
namespace LCU.API.Collections.RepoApi.DataAccess
{
[ExcludeFromCodeCoverage]
public class CoreDao : DaoClient, ICoreDao
{
private readonly RepoApiConfiguration _configuration;
public CoreDao(RepoApiConfiguration configuration,
IHttpClientFactory clientFactory) : base(clientFactory)
{
_configuration = configuration;
}
public async Task<MemberDetail> RetrieveMemberAsync(string accountNo)
{
var url = CreateUrlFromAccountNo(_configuration.CoreMemberUrl, accountNo);
return await RetrieveByIdentifierAsync<MemberDetail>(url, accountNo);
}
public async Task<LoanDetail> RetrieveLoanAsync(string accountNo)
{
var url = CreateUrlFromAccountNo(_configuration.CoreLoanUrl, accountNo);
return await RetrieveByIdentifierAsync<LoanDetail>(url, accountNo);
}
public async Task<IReadOnlyCollection<CollateralDetail>> RetrieveCollateralAsync(string accountNo)
{
var url = CreateUrlFromAccountNo(_configuration.CoreCollateralUrl, accountNo);
return await RetrieveByIdentifierAsync<IReadOnlyCollection<CollateralDetail>>(url, accountNo);
}
public async Task<IReadOnlyCollection<CoreTransaction>> RetrieveTransactionsAsync(string accountNo)
{
var url = CreateUrlFromAccountNoAndDateRange(_configuration.CoreLoanTransactions, accountNo);
return await RetrieveByIdentifierAsync<IReadOnlyCollection<CoreTransaction>>(url, accountNo);
}
private string CreateUrlFromAccountNo(string inputUrl, string accountNo)
{
var url = inputUrl.Replace(":loanId", accountNo);
return url;
}
private string CreateUrlFromAccountNoAndDateRange(string inputUrl, string accountNo)
{
var url = inputUrl.Replace(":accountNo", accountNo);
url = url.Replace(":startDate", DateTimeForUri(DateTime.Now.AddDays(_configuration.TransactionHistoryStartDateOffset)));
url = url.Replace(":endDate", DateTimeForUri(DateTime.Now));
url += FormatArrayValuesIntoQuery(_configuration.TransactionTypeCodes, _configuration.TransactionTypeCodeQueryPrefix);
return url;
}
private string DateTimeForUri(DateTime dateTime)
{
return dateTime.ToString(_configuration.TransactionHistoryParameterDateFormat);
}
private string FormatArrayValuesIntoQuery(List<string> arrayValues, string queryPrefix)
{
var returnString = "";
foreach (var arrayValue in arrayValues) {
returnString += (queryPrefix + arrayValue);
}
return returnString;
}
}
}