summaryrefslogtreecommitdiff
path: root/Blog/Services
diff options
context:
space:
mode:
Diffstat (limited to 'Blog/Services')
-rw-r--r--Blog/Services/BrpService.cs51
1 files changed, 51 insertions, 0 deletions
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 @@
1using System.Text.Json;
2using Blog.Models;
3using Microsoft.Extensions.Caching.Hybrid;
4
5namespace Blog.Services;
6
7public 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} \ No newline at end of file