using System.Text.Json; using Blog.Models; using Microsoft.Extensions.Caching.Hybrid; namespace Blog.Services; public class BrpService(HybridCache cache, IHttpClientFactory httpClientFactory) { public async Task GetBrpEntriesAsync(CancellationToken cancellationToken = default) { return await cache.GetOrCreateAsync( "brp", async cancel => { await using FileStream filestream = File.Open("Resources/test-data.json", FileMode.Open); var entries = await JsonSerializer.DeserializeAsync(filestream, cancellationToken: cancel) .ConfigureAwait(false); return entries ?? []; }, cancellationToken: cancellationToken) .ConfigureAwait(false); } public async Task GetBrpEntryAsync(string bsn, CancellationToken cancellationToken = default) { return await cache.GetOrCreateAsync( $"brp/{bsn}", bsn, async (state, cancel) => await FetchBrpEntryAsync(state, cancel), cancellationToken: cancellationToken) .ConfigureAwait(false); } private async Task FetchBrpEntryAsync(string bsn, CancellationToken cancellationToken) { var client = httpClientFactory.CreateClient("brp"); var response = await client.PostAsJsonAsync( "https://brp.bes.is/haalcentraal/api/brp/personen", new { type = "RaadpleegMetBurgerservicenummer", burgerservicenummer = new[] { bsn }, fields = new[] {"aNummer","adressering","burgerservicenummer","datumEersteInschrijvingGBA","datumInschrijvingInGemeente","europeesKiesrecht","geboorte","gemeenteVanInschrijving","geslacht","gezag","immigratie","indicatieCurateleRegister","kinderen","leeftijd","naam","nationaliteiten","ouders","overlijden","partners","uitsluitingKiesrecht","verblijfplaats","verblijfstitel","verblijfplaatsBinnenland","adresseringBinnenland"}, }, cancellationToken) .ConfigureAwait(false); await using var stream = await response.Content.ReadAsStreamAsync(cancellationToken).ConfigureAwait(false); return await JsonDocument.ParseAsync(stream, cancellationToken: cancellationToken).ConfigureAwait(false); } }