|
|
@@ -1353,8 +1353,8 @@ CachedNetworkImage/P1-15-patroon. Bevestigd via verse export:
|
|
|
— de force-unwrap is nu veilig, want alleen bereikbaar binnen de
|
|
|
guard. Uit deze lijst verwijderd.)*
|
|
|
|
|
|
-**P1-26 · Eigenaar: Bob (Drupal-kant: deployen + curl-testen; daarna
|
|
|
-samen FlutterFlow-kant).** Nieuwe Drupal Services-resource `favorieten`
|
|
|
+**P1-26 · Eigenaar: Claude (Drupal-kant afgerond, FlutterFlow-kant nu
|
|
|
+op te pakken).** Nieuwe Drupal Services-resource `favorieten`
|
|
|
(acties `flag`/`unflag`/`is_flagged`) om favorieten server-side generiek
|
|
|
te maken — niet meer alleen horeca-nodes (bestaande hartjes op
|
|
|
`HorecagelegenheidoverzichtKaart`/`HorecagelegenheidCurrent` gebruiken
|
|
|
@@ -1411,36 +1411,40 @@ server-code, dus dit moet hij zelf plakken):**
|
|
|
is_flagged × node/taxonomy_term), POST naar
|
|
|
`.../favorieten/<actie>.json` met sessie-cookie + `X-CSRF-Token`.
|
|
|
|
|
|
-**Nog open / vervolgstappen:**
|
|
|
-1. Bob plakt de 2 wijzigingen in `custom.module` +
|
|
|
- `custom.favorites_flag.inc` op de Drupal-server.
|
|
|
-2. **Zelfde per-endpoint-activatie-valkuil als bij `favorieten_agenda`**
|
|
|
- (zie `CLAUDE.md`): de nieuwe `favorieten`-resource moet apart
|
|
|
- aangevinkt worden op
|
|
|
- `admin/structure/services/list/<endpoint>/resources` — code alleen
|
|
|
- is niet genoeg.
|
|
|
-3. Testen met de gegeven curl-commando's — met name de HTTP-methode
|
|
|
- voor `is_flagged` staat nog niet vast (gedefinieerd als Services
|
|
|
- `action`, vermoedelijk POST net als flag/unflag, maar niet
|
|
|
- bevestigd — zelfde soort GET/POST-valkuil als eerder bij
|
|
|
- `favorieten_agenda` gevonden).
|
|
|
-4. **FlutterFlow-kant:** de bestaande custom action
|
|
|
- `lib/custom_code/actions/drupal_request.dart` werkt hiervoor
|
|
|
- ongewijzigd (geen Dart-aanpassing nodig) — bevestigd via
|
|
|
- code-review, twee aandachtspunten voor wie dit inbouwt:
|
|
|
- - De respons bij succes is een **los JSON-object**
|
|
|
- (`{"status":"flagged",...}`), geen array — dus binden via
|
|
|
- **Set from Variable → JSON Path** (bv. `$.status`, `$.is_flagged`),
|
|
|
- niet het `.toList()`/`List.generate`-patroon van
|
|
|
- `favorieten_agenda`.
|
|
|
- - `body` moet als kale JSON-string handmatig opgebouwd worden in de
|
|
|
- builder, bv. `'{"entity_id": ' + nid + '}'` (node, `entity_type`
|
|
|
- mag weg, default `'node'`) of `'{"entity_id": ' + tid + ',
|
|
|
- "entity_type": "taxonomy_term"}'` (gemeente).
|
|
|
-5. Zodra bevestigd werkend: koppelen aan een hartje-toggle-UI voor
|
|
|
- gemeenten (lost P1-7 Tab 2 op) en optioneel de bestaande
|
|
|
- horeca-hartjes migreren naar dit nieuwe, generieke endpoint i.p.v.
|
|
|
- hun huidige aparte implementatie.
|
|
|
+**Drupal-kant afgerond en bevestigd (2026-08-20, Bob deployed + Claude
|
|
|
+curl-geverifieerd op productie, na Bob's melding "resource nog niet
|
|
|
+ge-enabled" → alsnog aangevinkt):** alle 6 combinaties (flag/unflag/
|
|
|
+is_flagged × node/taxonomy_term) routeren nu correct — vóór de
|
|
|
+endpoint-activatie gaf elke aanroep een kale Drupal-HTML-404 (zelfde
|
|
|
+valkuil als `favorieten_agenda` destijds), ná activatie geeft elke
|
|
|
+aanroep de verwachte Services-JSON-403 voor een anonieme test-call:
|
|
|
+```
|
|
|
+POST .../favorieten/flag.json → 403 ["Access denied for user anonymous"]
|
|
|
+POST .../favorieten/unflag.json → 403 ["Access denied for user anonymous"]
|
|
|
+POST .../favorieten/is_flagged.json → 403 ["Access denied for user anonymous"]
|
|
|
+```
|
|
|
+**Open vraag opgelost: `is_flagged` gebruikt POST**, niet GET (een
|
|
|
+GET-aanroep bleef 404 geven, POST met dezelfde body gaf de verwachte
|
|
|
+403) — belangrijk voor wie de FlutterFlow-kant bouwt.
|
|
|
+
|
|
|
+**Nog open (FlutterFlow-kant, nu aan de beurt):** de bestaande custom
|
|
|
+action `lib/custom_code/actions/drupal_request.dart` werkt hiervoor
|
|
|
+ongewijzigd (geen Dart-aanpassing nodig, bevestigd via code-review),
|
|
|
+twee aandachtspunten voor de builder-implementatie:
|
|
|
+- De respons bij succes is een **los JSON-object**
|
|
|
+ (`{"status":"flagged",...}`), geen array — dus binden via
|
|
|
+ **Set from Variable → JSON Path** (bv. `$.status`, `$.is_flagged`),
|
|
|
+ niet het `.toList()`/`List.generate`-patroon van `favorieten_agenda`.
|
|
|
+- `body` moet als kale JSON-string handmatig opgebouwd worden in de
|
|
|
+ builder, bv. `'{"entity_id": ' + nid + '}'` (node, `entity_type` mag
|
|
|
+ weg, default `'node'`) of `'{"entity_id": ' + tid + ',
|
|
|
+ "entity_type": "taxonomy_term"}'` (gemeente, `method: 'POST'`, ook
|
|
|
+ voor `is_flagged`).
|
|
|
+- Koppelen aan een hartje-toggle-UI voor gemeenten (lost P1-7 Tab 2
|
|
|
+ op, zie daar voor Bob's gekozen aanpak — Optie 1) en optioneel de
|
|
|
+ bestaande horeca-hartjes migreren naar dit nieuwe, generieke
|
|
|
+ endpoint i.p.v. hun huidige aparte implementatie (niet meegenomen
|
|
|
+ in de eerste bouw, aparte opschoonstap).
|
|
|
|
|
|
**P1-13 · Eigenaar: Bob (geblokkeerd op een bevestigd FlutterFlow-
|
|
|
platformprobleem, geen Claude-taak meer totdat dat opgelost is).**
|