fix: Simplify GetPaginated in NordigenHttpClient
This commit is contained in:
@@ -27,7 +27,7 @@ public sealed class AccountClient : IAccountClient
|
||||
public async Task<Account> Get(Guid id, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var account = await _nordigenHttpClient
|
||||
.GetAsJson<Account>(Routes.Accounts.IdUri(id), cancellationToken)
|
||||
.Get<Account>(Routes.Accounts.IdUri(id), cancellationToken)
|
||||
.ConfigureAwait(false);
|
||||
|
||||
return account!;
|
||||
@@ -37,7 +37,7 @@ public sealed class AccountClient : IAccountClient
|
||||
public async Task<List<Balance>> GetBalances(Guid id, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var balances = await _nordigenHttpClient
|
||||
.GetAsJson<BalancesWrapper>(Routes.Accounts.BalancesUri(id), cancellationToken)
|
||||
.Get<BalancesWrapper>(Routes.Accounts.BalancesUri(id), cancellationToken)
|
||||
.ConfigureAwait(false);
|
||||
|
||||
return balances!.Balances;
|
||||
@@ -47,7 +47,7 @@ public sealed class AccountClient : IAccountClient
|
||||
public async Task<AccountDetails> GetDetails(Guid id, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var details = await _nordigenHttpClient
|
||||
.GetAsJson<AccountDetailsWrapper>(Routes.Accounts.DetailsUri(id), cancellationToken)
|
||||
.Get<AccountDetailsWrapper>(Routes.Accounts.DetailsUri(id), cancellationToken)
|
||||
.ConfigureAwait(false);
|
||||
|
||||
return details!.Account;
|
||||
@@ -62,7 +62,7 @@ public sealed class AccountClient : IAccountClient
|
||||
var uri = Routes.Accounts.TransactionsUri(id, interval);
|
||||
|
||||
var transactions = await _nordigenHttpClient
|
||||
.GetAsJson<TransactionsWrapper>(uri, cancellationToken)
|
||||
.Get<TransactionsWrapper>(uri, cancellationToken)
|
||||
.ConfigureAwait(false);
|
||||
|
||||
return transactions!.Transactions;
|
||||
|
||||
@@ -24,15 +24,14 @@ public sealed class AgreementClient : IAgreementClient
|
||||
/// <inheritdoc />
|
||||
public IAsyncEnumerable<EndUserAgreement> Get(int pageSize = 100, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var requestUri = $"{Routes.Agreements.Uri}?limit={pageSize}&offset=0";
|
||||
return _nordigenHttpClient.GetAsJsonPaginated<EndUserAgreement>(requestUri, cancellationToken);
|
||||
return _nordigenHttpClient.GetPaginated<EndUserAgreement>(Routes.Agreements.PaginatedUri(100), cancellationToken);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public async Task<EndUserAgreement> Get(Guid id, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var agreement = await _nordigenHttpClient
|
||||
.GetAsJson<EndUserAgreement>(Routes.Agreements.IdUri(id), cancellationToken)
|
||||
.Get<EndUserAgreement>(Routes.Agreements.IdUri(id), cancellationToken)
|
||||
.ConfigureAwait(false);
|
||||
|
||||
return agreement!;
|
||||
@@ -42,7 +41,7 @@ public sealed class AgreementClient : IAgreementClient
|
||||
public async Task<EndUserAgreement> Post(EndUserAgreementCreation agreementCreation)
|
||||
{
|
||||
var agreement = await _nordigenHttpClient
|
||||
.PostAsJson<EndUserAgreementCreation, EndUserAgreement>(Routes.Agreements.Uri, agreementCreation)
|
||||
.Post<EndUserAgreementCreation, EndUserAgreement>(Routes.Agreements.Uri, agreementCreation)
|
||||
.ConfigureAwait(false);
|
||||
|
||||
return agreement!;
|
||||
@@ -58,7 +57,7 @@ public sealed class AgreementClient : IAgreementClient
|
||||
public async Task<EndUserAgreement> Put(Guid id, EndUserAgreementAcceptance acceptance)
|
||||
{
|
||||
var agreement = await _nordigenHttpClient
|
||||
.PutAsJson<EndUserAgreementAcceptance, EndUserAgreement>(Routes.Agreements.AcceptUri(id), acceptance)
|
||||
.Put<EndUserAgreementAcceptance, EndUserAgreement>(Routes.Agreements.AcceptUri(id), acceptance)
|
||||
.ConfigureAwait(false);
|
||||
|
||||
return agreement!;
|
||||
|
||||
@@ -24,7 +24,7 @@ public sealed class InstitutionClient : IInstitutionClient
|
||||
public async Task<List<Institution>> GetByCountry(string countryCode, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var institutions = await _nordigenHttpClient
|
||||
.GetAsJson<List<Institution>>(Routes.Institutions.CountryUri(countryCode), cancellationToken)
|
||||
.Get<List<Institution>>(Routes.Institutions.CountryUri(countryCode), cancellationToken)
|
||||
.ConfigureAwait(false);
|
||||
|
||||
return institutions!;
|
||||
@@ -34,7 +34,7 @@ public sealed class InstitutionClient : IInstitutionClient
|
||||
public async Task<Institution> Get(string id, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var institution = await _nordigenHttpClient
|
||||
.GetAsJson<Institution>(Routes.Institutions.IdUri(id), cancellationToken)
|
||||
.Get<Institution>(Routes.Institutions.IdUri(id), cancellationToken)
|
||||
.ConfigureAwait(false);
|
||||
|
||||
return institution!;
|
||||
|
||||
@@ -35,49 +35,42 @@ public sealed class NordigenHttpClient
|
||||
}.ConfigureForNodaTime(dateTimeZoneProvider);
|
||||
}
|
||||
|
||||
internal async Task<TResult?> GetAsJson<TResult>(string requestUri, CancellationToken cancellationToken)
|
||||
internal async Task<TResult?> Get<TResult>(string requestUri, CancellationToken cancellationToken)
|
||||
{
|
||||
return await _httpClient.GetFromJsonAsync<TResult>(requestUri, _serializerOptions, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
internal async IAsyncEnumerable<TResult> GetAsJsonPaginated<TResult>(
|
||||
internal async IAsyncEnumerable<TResult> GetPaginated<TResult>(
|
||||
string requestUri,
|
||||
[EnumeratorCancellation] CancellationToken cancellationToken)
|
||||
where TResult : class
|
||||
{
|
||||
var next = requestUri;
|
||||
do
|
||||
while (next is not null && !cancellationToken.IsCancellationRequested)
|
||||
{
|
||||
if (cancellationToken.IsCancellationRequested)
|
||||
{
|
||||
yield break;
|
||||
}
|
||||
|
||||
var paginatedList = await GetAsJson<PaginatedList<TResult>>(next, cancellationToken).ConfigureAwait(false);
|
||||
|
||||
var paginatedList = await Get<PaginatedList<TResult>>(next, cancellationToken).ConfigureAwait(false);
|
||||
if (paginatedList?.Results is null)
|
||||
{
|
||||
yield break;
|
||||
}
|
||||
|
||||
foreach (var requisition in paginatedList.Results)
|
||||
foreach (var result in paginatedList.Results)
|
||||
{
|
||||
yield return requisition;
|
||||
yield return result;
|
||||
}
|
||||
|
||||
next = paginatedList.Next?.PathAndQuery;
|
||||
}
|
||||
while (next is not null);
|
||||
}
|
||||
|
||||
internal async Task<TResult?> PostAsJson<TRequest, TResult>(string requestUri, TRequest request)
|
||||
internal async Task<TResult?> Post<TRequest, TResult>(string requestUri, TRequest request)
|
||||
{
|
||||
var response = await _httpClient.PostAsJsonAsync(requestUri, request, _serializerOptions).ConfigureAwait(false);
|
||||
await response.ThrowIfNotSuccessful().ConfigureAwait(false);
|
||||
return await response.Content.ReadFromJsonAsync<TResult>(_serializerOptions).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
internal async Task<TResult?> PutAsJson<TRequest, TResult>(string requestUri, TRequest request)
|
||||
internal async Task<TResult?> Put<TRequest, TResult>(string requestUri, TRequest request)
|
||||
{
|
||||
var response = await _httpClient.PutAsJsonAsync(requestUri, request, _serializerOptions).ConfigureAwait(false);
|
||||
await response.ThrowIfNotSuccessful().ConfigureAwait(false);
|
||||
|
||||
@@ -24,15 +24,14 @@ public sealed class RequisitionClient : IRequisitionClient
|
||||
/// <inheritdoc />
|
||||
public IAsyncEnumerable<Requisition> Get(int pageSize = 100, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var requestUri = $"{Routes.Requisitions.Uri}?limit={pageSize}&offset=0";
|
||||
return _nordigenHttpClient.GetAsJsonPaginated<Requisition>(requestUri, cancellationToken);
|
||||
return _nordigenHttpClient.GetPaginated<Requisition>(Routes.Requisitions.PaginatedUri(pageSize), cancellationToken);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public async Task<Requisition> Get(Guid id, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var requisition = await _nordigenHttpClient
|
||||
.GetAsJson<Requisition>(Routes.Requisitions.IdUri(id), cancellationToken)
|
||||
.Get<Requisition>(Routes.Requisitions.IdUri(id), cancellationToken)
|
||||
.ConfigureAwait(false);
|
||||
|
||||
return requisition!;
|
||||
@@ -42,7 +41,7 @@ public sealed class RequisitionClient : IRequisitionClient
|
||||
public async Task<Requisition> Post(RequisitionCreation requisitionCreation)
|
||||
{
|
||||
var requisition = await _nordigenHttpClient
|
||||
.PostAsJson<RequisitionCreation, Requisition>(Routes.Requisitions.Uri, requisitionCreation)
|
||||
.Post<RequisitionCreation, Requisition>(Routes.Requisitions.Uri, requisitionCreation)
|
||||
.ConfigureAwait(false);
|
||||
|
||||
return requisition!;
|
||||
|
||||
@@ -10,10 +10,14 @@ namespace VMelnalksnis.NordigenDotNet;
|
||||
|
||||
internal static class Routes
|
||||
{
|
||||
private static string PaginatedUri(string baseUri, int pageSize) => $"{baseUri}?limit={pageSize}&offset=0";
|
||||
|
||||
internal static class Agreements
|
||||
{
|
||||
internal const string Uri = "api/v2/agreements/enduser/";
|
||||
|
||||
internal static string PaginatedUri(int pageSize) => Routes.PaginatedUri(Uri, pageSize);
|
||||
|
||||
internal static string IdUri(Guid id) => $"{Uri}{id:N}/";
|
||||
|
||||
internal static string AcceptUri(Guid id) => $"{IdUri(id)}accept/";
|
||||
@@ -49,6 +53,8 @@ internal static class Routes
|
||||
{
|
||||
internal const string Uri = "api/v2/requisitions/";
|
||||
|
||||
internal static string PaginatedUri(int pageSize) => Routes.PaginatedUri(Uri, pageSize);
|
||||
|
||||
internal static string IdUri(Guid id) => $"{Uri}{id:N}/";
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user