// Get some transactions public async Task <List <Transaction> > GetTransactionsAsync() { List <Transaction> transactions = _cacheService.GetCache().Transactions; if (transactions.Count > 0) { // The transactions have already been retrieved return(transactions); } AccountsResponseDTO accountsResponseDTO = _cacheService.GetCache().AccountsResponseDTO; // If we don't already have the accounts, get them now. // (Or if they are no accounts try and get them again.) if (accountsResponseDTO == null || accountsResponseDTO.Accounts.Count == 0) { List <Account> result = await GetAccountsAsync(); if (result == null) { return(null); } } accountsResponseDTO = _cacheService.GetCache().AccountsResponseDTO; if (accountsResponseDTO == null) { return(null); } IEnumerable <Task <List <Transaction> > > tasks = accountsResponseDTO.Accounts.Select(i => GetAccountTransactions(i.AccountId)); List <Transaction>[] results = await Task.WhenAll(tasks); foreach (List <Transaction> result in results) { if (result != null) { transactions.AddRange(result); } } Cache cache = new Cache { Transactions = transactions, AccountsResponseDTO = _cacheService.GetCache().AccountsResponseDTO, ExchangeResponseDTO = _cacheService.GetCache().ExchangeResponseDTO }; _cacheService.SetCache(cache); return(transactions); }
public HttpRequestServiceTests() { trueLayerCredentialsOptions = Options.Create(trueLayerCredentials); dummyExchangeResponseDTO = new ExchangeResponseDTO { AccessToken = dummyAccessToken }; Account account1 = new Account { AccountId = "1" }; Account account2 = new Account { AccountId = "2" }; dummyAccountsResponseDTO = new AccountsResponseDTO { Accounts = new List <Account> { account1, account2 } }; dummyCacheWithCodeAndAccessToken = new Cache { ExchangeResponseDTO = dummyExchangeResponseDTO }; dummyCacheWithAccounts = new Cache { ExchangeResponseDTO = dummyExchangeResponseDTO, AccountsResponseDTO = dummyAccountsResponseDTO }; Transaction transaction1 = new Transaction { Amount = -1.0m, TransactionCategory = "PURCHASE", Timestamp = DateTime.Parse("2020-03-06T00:00:00+00:00") }; Transaction transaction2 = new Transaction { Amount = 2.0m, TransactionCategory = "BILL_PAYMENT", Timestamp = DateTime.Parse("2020-04-06T00:00:00+00:00") }; dummyTransactions = new List <Transaction> { transaction1, transaction2 }; dummyTransactionsResponseDTO = new TransactionsResponseDTO { Transactions = dummyTransactions }; }
// Get the users accounts public async Task <List <Account> > GetAccountsAsync() { string uri = _trueLayerCredentials.Value.BaseDataApiUrl + "/data/v1/accounts"; AccountsResponseDTO responseObj = (AccountsResponseDTO) await DoRequest <AccountsResponseDTO>(HttpMethod.Get, uri, true, null); if (responseObj == null) { return(null); } Cache cache = new Cache { AccountsResponseDTO = responseObj, ExchangeResponseDTO = _cacheService.GetCache().ExchangeResponseDTO }; _cacheService.SetCache(cache); return(responseObj.Accounts); }