refactor: voeg sets[] toe aan alle NL-provincies en NL-wateren #68

Closed
opened 2026-04-12 16:09:29 +02:00 by Ghost · 1 comment
Ghost commented 2026-04-12 16:09:29 +02:00 (Migrated from codeberg.org)

Probleem

NL-provincies en NL-wateren zonder sets-property vereisen aparte code-paden in initLevel(). Momenteel zijn er 4 if/else-takken met elk andere filterlogica:

  • province: phases ? filter(sets) : ALL_PROVINCES (zonder filter)
  • water: phases ? filter(sets) : filter(!sets)
  • country: filter(sets.includes)
  • place: filter(sets.includes)

De eerste twee paden bestaan alleen omdat NL-data geen sets-property heeft.

Oplossing

Voeg sets: [setNumber] toe aan alle NL-provincies in ALL_PROVINCES en alle NL-wateren in ALL_WATERS:

// cities.js — ALL_PROVINCES
{ name: 'Groningen',       lat: 53.22, lon: 6.57,  aliases: [], sets: [54] },
{ name: 'Friesland',       lat: 53.11, lon: 5.80,  aliases: ['Fryslân'], sets: [54] },
// ... etc.

// cities.js — ALL_WATERS
{ name: 'Waddenzee',      lat: 53.26, lon: 5.19,  sets: [57] },
{ name: 'Markermeer',     lat: 52.55, lon: 5.25,  sets: [57] },
// ... etc.

Dan wordt initLevel() universeel:

activeCities = SOURCE[quizType].filter(c => c.sets.includes(setNumber));

Geen speciale if/else per type meer.

Impact

  • ~20 regels verwijderd uit initLevel()
  • Consistente data-structuur over alle quizTypes
  • Puur additief (sets toevoegen, geen bestaande velden verwijderen)

Risico

Midden — raakt bestaande data. Maar additief en er zijn unit tests die de tellingen borgen. Controleer na de wijziging dat ALL_PROVINCES.filter(p => !p.sets).length nog steeds 0 is (of pas de test aan).

Aanpak

  • Werk na issue #67 (polygonTypes-register)
  • Check alle unit tests in test.js die ALL_PROVINCES.length of ALL_WATERS.length aanroepen
  • Playwright smoke tests voor set 54 (provincies) en set 57 (wateren) als regressiecheck

Zie REFACTORING.md voorstel #6

## Probleem NL-provincies en NL-wateren zonder `sets`-property vereisen aparte code-paden in `initLevel()`. Momenteel zijn er 4 if/else-takken met elk andere filterlogica: - `province`: `phases ? filter(sets) : ALL_PROVINCES` (zonder filter) - `water`: `phases ? filter(sets) : filter(!sets)` - `country`: `filter(sets.includes)` - `place`: `filter(sets.includes)` De eerste twee paden bestaan alleen omdat NL-data geen `sets`-property heeft. ## Oplossing Voeg `sets: [setNumber]` toe aan alle NL-provincies in `ALL_PROVINCES` en alle NL-wateren in `ALL_WATERS`: ```js // cities.js — ALL_PROVINCES { name: 'Groningen', lat: 53.22, lon: 6.57, aliases: [], sets: [54] }, { name: 'Friesland', lat: 53.11, lon: 5.80, aliases: ['Fryslân'], sets: [54] }, // ... etc. // cities.js — ALL_WATERS { name: 'Waddenzee', lat: 53.26, lon: 5.19, sets: [57] }, { name: 'Markermeer', lat: 52.55, lon: 5.25, sets: [57] }, // ... etc. ``` Dan wordt `initLevel()` universeel: ```js activeCities = SOURCE[quizType].filter(c => c.sets.includes(setNumber)); ``` Geen speciale if/else per type meer. ## Impact - ~20 regels verwijderd uit `initLevel()` - Consistente data-structuur over alle quizTypes - Puur additief (sets toevoegen, geen bestaande velden verwijderen) ## Risico Midden — raakt bestaande data. Maar additief en er zijn unit tests die de tellingen borgen. Controleer na de wijziging dat `ALL_PROVINCES.filter(p => !p.sets).length` nog steeds 0 is (of pas de test aan). ## Aanpak - Werk na issue #67 (polygonTypes-register) - Check alle unit tests in test.js die `ALL_PROVINCES.length` of `ALL_WATERS.length` aanroepen - Playwright smoke tests voor set 54 (provincies) en set 57 (wateren) als regressiecheck _Zie REFACTORING.md voorstel #6_
Ghost commented 2026-04-12 21:20:52 +02:00 (Migrated from codeberg.org)

Geïmplementeerd in refactor-commit 96e1a18.

Geïmplementeerd in refactor-commit 96e1a18.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
jelmer/topoquiz#68
No description provided.