Example #1
0
        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;
            }
        }