Quellcode durchsuchen

TASKS.md: P1-26 Drupal-kant bevestigd werkend (curl, alle 6 combinaties)

flag/unflag/is_flagged routeren nu correct na endpoint-activatie
(Bob had de resource nog niet aangevinkt op admin/structure/services).
is_flagged blijkt POST te gebruiken, niet GET. FlutterFlow-kant nu
open, Eigenaar gezet op Claude.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
bob vor 3 Wochen
Ursprung
Commit
892cc4bdc7
1 geänderte Dateien mit 36 neuen und 32 gelöschten Zeilen
  1. 36 32
      TASKS.md

+ 36 - 32
TASKS.md

@@ -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).**