Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: meer metadata in de sitemap #44

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions ODBP.Server/Features/Sitemap/SitemapInstances/SitemapController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ public async Task<IActionResult> Get(CancellationToken token)
{
continue;
}

publicaties.Add(new()
{
Loc = new Uri(baseUri, $"{DocumentenRoot}/{document.Uuid}/download").ToString(),
Expand All @@ -60,14 +61,24 @@ public async Task<IActionResult> Get(CancellationToken token)
{
DiWoo = new()
{
Creatiedatum = document.Creatiedatum,
// als we om de een of andere reden geen organisatie kunnen vinden obv van de publisher id, laten we deze leeg
// we voorzien niet dat dit gebeurt maar het is altijd beter om een document met minder metadata te tonen dan helemaal niet
Publisher = organisaties.TryGetValue(publicatie.Publisher, out var publisher)
? publisher
: null,
Opsteller = publicatie.Opsteller != null && organisaties.TryGetValue(publicatie.Opsteller, out var opsteller)
? opsteller
: null,
Verantwoordelijke = publicatie.Verantwoordelijke != null && organisaties.TryGetValue(publicatie.Verantwoordelijke, out var verantwoordelijke)
? verantwoordelijke
: null,
Identifiers = string.IsNullOrWhiteSpace(document.Identifier) ? null : [document.Identifier],
Omschrijvingen = string.IsNullOrWhiteSpace(document.Omschrijving) ? null : [document.Omschrijving],
Titelcollectie = new()
{
OfficieleTitel = document.OfficieleTitel,
VerkorteTitels = string.IsNullOrWhiteSpace(document.VerkorteTitel) ? null : [document.VerkorteTitel]
},
Classificatiecollectie = new()
{
Expand Down Expand Up @@ -200,15 +211,20 @@ public class OdrcDocument
public required string Uuid { get; set; }
public required string Publicatie { get; set; }
public required string OfficieleTitel { get; set; }
public string? VerkorteTitel { get; set; }
public required string Identifier { get; set; }
public required DateTimeOffset LaatstGewijzigdDatum { get; set; }
public required IReadOnlyList<OdrcDocumentHandeling> Documenthandelingen { get; set; }
public required string Creatiedatum { get; set; }
public string? Omschrijving { get; set; }
}

public class OdrcPublicatie
{
public required string Uuid { get; set; }
public required string Publisher { get; set; }
public string? Verantwoordelijke { get; set; }
public string? Opsteller { get; set; }
public required DateTimeOffset LaatstGewijzigdDatum { get; set; }
public required IReadOnlyList<string> InformatieCategorieen { get; set; }
}
Expand Down
21 changes: 21 additions & 0 deletions ODBP.Server/Features/Sitemap/SitemapInstances/SitemapModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,26 @@ public class Document

public class DiWoo
{
[XmlElement("creatiedatum")]
public required string Creatiedatum { get; set; }

[XmlArray("identifiers")]
[XmlArrayItem("identifier")]
public required string[]? Identifiers { get; set; }

[XmlElement("publisher")]
public required ResourceWithValue? Publisher { get; init; }

[XmlElement("verantwoordelijke")]
public required ResourceWithValue? Verantwoordelijke { get; init; }

[XmlElement("opsteller")]
public required ResourceWithValue? Opsteller { get; init; }

[XmlArray("omschrijvingen")]
[XmlArrayItem("omschrijving")]
public required string[]? Omschrijvingen { get; set; }

[XmlElement("titelcollectie")]
public required Titelcollectie Titelcollectie { get; init; }

Expand All @@ -50,6 +67,10 @@ public class Titelcollectie
{
[XmlElement("officieleTitel")]
public required string OfficieleTitel { get; init; }

[XmlArray("verkorteTitels")]
[XmlArrayItem("verkorteTitel")]
public required string[]? VerkorteTitels { get; init; }
}

public class Classificatiecollectie
Expand Down
17 changes: 12 additions & 5 deletions ODBP.Server/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,19 @@
builder.Services.AddHttpClient();
builder.Services.AddSingleton<IOdrcClientFactory, OdrcClientFactory>();
builder.Services.AddBaseUri();

// de sitemap duurt even om te genereren. de cache gaat in als de sitemap klaar is
// stel een crawler draait elke dag om 01:00. dan is de sitemap bv om 01:01 klaar en dan gaat de cache in
// als de cache dan pas de volgende dag om 01:01 verloopt, krijgt de crawler de volgende dag de gecachete waarde.
// daarom maar een uurtje minder lang cachen
const int DefaultCacheExpiryHours = 23;

var cacheExpiryHours = double.TryParse(builder.Configuration["SITEMAP_CACHE_DURATION_HOURS"], out var d)
? d
: DefaultCacheExpiryHours;

builder.Services.AddOutputCache(x=> x.AddPolicy(OutputCachePolicies.Sitemap,
// de sitemap duurt even om te genereren. de cache gaat in als de sitemap klaar is
// stel een crawler draait elke dag om 01:00. dan is de sitemap bv om 01:01 klaar en dan gaat de cache in
// als de cache dan pas de volgende dag om 01:01 verloopt, krijgt de crawler de volgende dag de gecachete waarde.
// daarom maar een uurtje minder lang cachen
b=> b.Expire(TimeSpan.FromHours(23))));
b=> b.Expire(TimeSpan.FromHours(cacheExpiryHours))));

var app = builder.Build();

Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@
| `ODRC_API_KEY` | De geheime sleutel voor de ODRC (Registratiecomponent) waarmee gekoppeld moet worden. <details> <summary>Meer informatie </summary>Bijvoorbeeld: `VM2B!ccnebNe.M*gxH63*NXc8iTiAGhp`</details> |
| `REDIRECT_URL` | De url waar de bezoeker naartoe geleid moet worden als deze het portaal bezoekt. <details> <summary>Meer informatie </summary>Bijvoorbeeld: `https://www.mijn-gemeente.nl`</details> |
| `DOWNLOAD_TIMEOUT_MINUTES` | Het aantal minuten dat het downloaden van bestanden maximaal mag duren. <br/> (default waarde is `10`) |
| `SITEMAP_CACHE_DURATION_HOURS` | Het aantal uur dat de sitemap in de cache bewaard wordt. <br/> (default waarde is `23`)
Loading