From 93f038ffa95f1c2f4780c684a1b780666b086882 Mon Sep 17 00:00:00 2001 From: Marijn Besseling Date: Sun, 21 Sep 2025 17:47:15 +0200 Subject: Add BRP Test data --- Blog/Services/BrpService.cs | 51 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 Blog/Services/BrpService.cs (limited to 'Blog/Services/BrpService.cs') diff --git a/Blog/Services/BrpService.cs b/Blog/Services/BrpService.cs new file mode 100644 index 0000000..e2e23c0 --- /dev/null +++ b/Blog/Services/BrpService.cs @@ -0,0 +1,51 @@ +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); + } +} \ No newline at end of file -- cgit v1.2.3