Blog/Services/BrpService.cs 2.4 K · 51 lines · raw · history

1 using System.Text.Json;
2 using Blog.Models;
3 using Microsoft.Extensions.Caching.Hybrid;
4
5 namespace Blog.Services;
6
7 public class BrpService(HybridCache cache, IHttpClientFactory httpClientFactory)
8 {
9 public async Task<BRPEntry[]> GetBrpEntriesAsync(CancellationToken cancellationToken = default)
10 {
11 return await cache.GetOrCreateAsync(
12 "brp",
13 async cancel =>
14 {
15 await using FileStream filestream = File.Open("Resources/test-data.json", FileMode.Open);
16 var entries = await JsonSerializer.DeserializeAsync<BRPEntry[]>(filestream, cancellationToken: cancel)
17 .ConfigureAwait(false);
18 return entries ?? [];
19 },
20 cancellationToken: cancellationToken)
21 .ConfigureAwait(false);
22 }
23
24 public async Task<JsonDocument> GetBrpEntryAsync(string bsn, CancellationToken cancellationToken = default)
25 {
26 return await cache.GetOrCreateAsync(
27 $"brp/{bsn}",
28 bsn,
29 async (state, cancel) => await FetchBrpEntryAsync(state, cancel),
30 cancellationToken: cancellationToken)
31 .ConfigureAwait(false);
32 }
33
34 private async Task<JsonDocument> FetchBrpEntryAsync(string bsn, CancellationToken cancellationToken)
35 {
36 var client = httpClientFactory.CreateClient("brp");
37 var response = await client.PostAsJsonAsync(
38 "https://brp.bes.is/haalcentraal/api/brp/personen",
39 new
40 {
41 type = "RaadpleegMetBurgerservicenummer",
42 burgerservicenummer = new[] { bsn },
43 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"},
44 },
45 cancellationToken)
46 .ConfigureAwait(false);
47
48 await using var stream = await response.Content.ReadAsStreamAsync(cancellationToken).ConfigureAwait(false);
49 return await JsonDocument.ParseAsync(stream, cancellationToken: cancellationToken).ConfigureAwait(false);
50 }
51 }