public async Task <BankingResult <List <Transaction> > > GetTransactionsAsync(string accountId, IPagerContext context = null) { try { var account = _userContextLocal.Accounts.FirstOrDefault(x => x.Id == accountId) ?? throw new ApiCallException("Invalid accountId"); BerlinGroupPagerContext pagerContext = (context as BerlinGroupPagerContext) ?? new BerlinGroupPagerContext(); var client = GetClient(); client.DefaultRequestHeaders.Add("Accept", "application/vnd.belfius.api+json; version=1"); client.DefaultRequestHeaders.Add("Accept-Language", "en"); // TODO how do we get Redirect-URI here client.DefaultRequestHeaders.Add("Redirect-URI", "http://127.0.0.1:8080"); if (account.Token.TokenValidUntil < DateTime.Now) { await RefreshToken(account.Token); } client.DefaultRequestHeaders.Add("Authorization", account.Token.Token); var url = $"/sandbox/psd2/accounts/{accountId}/transactions{pagerContext.GetRequestParams()}"; var result = await client.GetAsync(url); string rawData = await result.Content.ReadAsStringAsync(); var model = JsonConvert.DeserializeObject <BelfiusTransactions>(rawData); //TODO create pager context //pagerContext.SetPage(pagerContext.GetNextPage()); //pagerContext.SetPageTotal(model.transactions.PageTotal); var data = model._embedded.transactions.Select(x => new Transaction { Id = x.transaction_ref, Amount = x.amount, CounterpartReference = x.counterparty_account, Currency = x.currency, ExecutionDate = x.execution_date }).ToList(); // JGD Do we keep this trace? //await sdkApiConnector.Log((int)ConnectorType, _url, (int)watch.ElapsedMilliseconds, url, (int)result.StatusCode, Http.Get, requestedAt, _userContext.UserId, null/*model.account.iban*/); return(new BankingResult <List <Transaction> >(ResultStatus.DONE, url, data, rawData, pagerContext)); } catch (ApiCallException e) { throw e; } catch (ApiUnauthorizedException e) { throw e; } catch (PagerException e) { throw e; } catch (SdkUnauthorizedException e) { throw e; } catch (Exception e) { await LogAsync(apiUrl, 500, Http.Get, e.ToString()); throw e; } }
public async Task <BankingResult <List <Transaction> > > GetTransactionsAsync(string accountId, IPagerContext context = null) { try { var account = _userContextLocal.Accounts.FirstOrDefault(x => x.Id == accountId) ?? throw new ApiCallException("Invalide accountId"); var consent = _userContextLocal.Consents.FirstOrDefault(x => x.ConsentId == account.BalancesConsentId && x.ValidUntil > DateTime.Now) ?? throw new ApiCallException("Consent invalide or expired"); BerlinGroupPagerContext pagerContext = (context as BerlinGroupPagerContext) ?? new BerlinGroupPagerContext(); var client = GetClient(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); client.DefaultRequestHeaders.Add("Consent-ID", consent.ConsentId); if (consent.TokenValidUntil < DateTime.Now) { await RefreshToken(consent); } client.DefaultRequestHeaders.Add("Authorization", consent.Token); var url = $"/psd2/v2/accounts/{accountId}/transactions{pagerContext.GetRequestParams()}"; url = $"/psd2/v2/accounts/{accountId}/transactions"; var result = await client.GetAsync(url); string rawData = await result.Content.ReadAsStringAsync(); var model = JsonConvert.DeserializeObject <BerlinGroupTransactionsModelDto>(rawData); pagerContext.SetPage(pagerContext.GetNextPage()); pagerContext.SetPageTotal(model.transactions.PageTotal); var data = model.transactions.all.Select(x => new Transaction { Id = x.transactionId, Amount = x.transactionAmount.amount, CounterpartReference = x.transactionAmount.amount >= Decimal.Zero ? x.debtorAccount?.iban : x.creditorAccount?.iban, CounterpartName = x.transactionAmount.amount >= Decimal.Zero ? x.debtorName : x.creditorName, Currency = x.transactionAmount.currency, Description = x.remittanceInformationUnstructured, ExecutionDate = x.bookingDate, ValueDate = x.valueDate }).ToList(); return(new BankingResult <List <Transaction> >(ResultStatus.DONE, url, data, rawData, pagerContext)); } catch (ApiCallException e) { throw e; } catch (SdkUnauthorizedException e) { throw e; } catch (Exception e) { await LogAsync(apiUrl, 500, Http.Get, e.ToString()); throw e; } }