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 RetrieveMemberAsync(string accountNo) { var url = CreateUrlFromAccountNo(_configuration.CoreMemberUrl, accountNo); return await RetrieveByIdentifierAsync(url, accountNo); } public async Task RetrieveLoanAsync(string accountNo) { var url = CreateUrlFromAccountNo(_configuration.CoreLoanUrl, accountNo); return await RetrieveByIdentifierAsync(url, accountNo); } public async Task> RetrieveCollateralAsync(string accountNo) { var url = CreateUrlFromAccountNo(_configuration.CoreCollateralUrl, accountNo); return await RetrieveByIdentifierAsync>(url, accountNo); } public async Task> RetrieveTransactionsAsync(string accountNo) { var url = CreateUrlFromAccountNoAndDateRange(_configuration.CoreLoanTransactions, accountNo); return await RetrieveByIdentifierAsync>(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 arrayValues, string queryPrefix) { var returnString = ""; foreach (var arrayValue in arrayValues) { returnString += (queryPrefix + arrayValue); } return returnString; } } }