feat(web): page admin de CRUD des didacticiels (#44) #61

Merged
kyuno merged 1 commit from feat/admin-tour-page into main 2026-09-06 07:27:17 +02:00
Owner

L'UI par-dessus l'API /admin/api/tours* (PR #59). Dernier morceau du chantier #42/#44.

Contenu

  • Nouvelle entrée /admin/didacticiels dans AdminLayout (i18n admin.nav.tours, icône GraduationCap), route sous RequireAdmin+AdminLayout (App.tsx).
  • ToursPage.tsx — liste des scénarios à gauche (nom, état activé/désactivé, nombre d'étapes) ; éditeur du scénario sélectionné à droite :
    • renommer, activer / désactiver ;
    • éditer la liste d'étapes : route, cible (<select> alimenté par GET /tours/targets), titre, contenu ; réordonner (↑ / ↓), ajouter, retirer ;
    • « Enregistrer » → un seul PATCH /:id qui remplace tout (name/enabled + étapes rénumérotées order = index) ; erreurs API affichées telles quelles ;
    • « Supprimer le scénario » (confirmation window.confirm) ;
    • « Nouveau scénario » → formulaire clé + nom → POST /.
  • admin-client.ts gagne getTourScenarios / getTourTargets / createTourScenario / updateTourScenario / deleteTourScenario.

Les analytics de complétion (tour.completed / tour.skipped, émises par l'endpoint de complétion de #58) apparaissent déjà sur le dashboard admin sans aucun changement — getMetrics() agrège tout type d'AnalyticsEvent et DashboardPage le rend génériquement (le « quasi gratuit » annoncé par #44).

Tests

cypress/e2e/admin-tours.cy.ts (4) : liste (activés + désactivés, nombre d'étapes) ; édition nom + réordonnancement d'étapes → un seul PATCH avec la liste complète réordonnée ; création → POST {key,name} ; suppression après confirmation → DELETE. 4/4 en local, + 10 spécs admin de non-régression (admin-layout / admin-catalog / admin-dashboard / admin-login) vertes. pnpm build + pnpm lint verts.

Closes #44

🤖 Generated with Claude Code

L'UI par-dessus l'API `/admin/api/tours*` (PR #59). Dernier morceau du chantier #42/#44. ## Contenu - Nouvelle entrée `/admin/didacticiels` dans `AdminLayout` (i18n `admin.nav.tours`, icône `GraduationCap`), route sous `RequireAdmin`+`AdminLayout` (`App.tsx`). - **`ToursPage.tsx`** — liste des scénarios à gauche (nom, état activé/désactivé, nombre d'étapes) ; éditeur du scénario sélectionné à droite : - renommer, activer / désactiver ; - éditer la liste d'étapes : `route`, `cible` (`<select>` alimenté par `GET /tours/targets`), `titre`, `contenu` ; réordonner (↑ / ↓), ajouter, retirer ; - **« Enregistrer » → un seul `PATCH /:id`** qui remplace tout (name/enabled + étapes rénumérotées `order` = index) ; erreurs API affichées telles quelles ; - « Supprimer le scénario » (confirmation `window.confirm`) ; - « Nouveau scénario » → formulaire `clé` + `nom` → `POST /`. - **`admin-client.ts`** gagne `getTourScenarios` / `getTourTargets` / `createTourScenario` / `updateTourScenario` / `deleteTourScenario`. Les analytics de complétion (`tour.completed` / `tour.skipped`, émises par l'endpoint de complétion de #58) apparaissent déjà sur le dashboard admin **sans aucun changement** — `getMetrics()` agrège tout type d'`AnalyticsEvent` et `DashboardPage` le rend génériquement (le « quasi gratuit » annoncé par #44). ## Tests `cypress/e2e/admin-tours.cy.ts` (4) : liste (activés + désactivés, nombre d'étapes) ; édition nom + réordonnancement d'étapes → **un seul PATCH avec la liste complète réordonnée** ; création → `POST {key,name}` ; suppression après confirmation → `DELETE`. **4/4 en local**, + 10 spécs admin de non-régression (`admin-layout` / `admin-catalog` / `admin-dashboard` / `admin-login`) vertes. `pnpm build` + `pnpm lint` verts. Closes #44 🤖 Generated with [Claude Code](https://claude.com/claude-code)
kyuno added 1 commit 2026-09-06 07:10:52 +02:00
feat(web): page admin de CRUD des didacticiels (#44)
All checks were successful
CI / lint (push) Successful in 2m10s
CI / build (push) Successful in 2m19s
CI / intent-service-test (push) Successful in 4m41s
CI / e2e (push) Successful in 7m19s
CI / test (push) Successful in 16m20s
b39105ac27
L'UI par-dessus l'API `/admin/api/tours*`. Nouvelle entrée
`/admin/didacticiels` dans `AdminLayout` (i18n `admin.nav.tours`), route
sous `RequireAdmin`+`AdminLayout` dans `App.tsx`.

`ToursPage.tsx` : liste des scénarios à gauche (nom, état activé/désactivé,
nombre d'étapes) ; à droite l'éditeur du scénario sélectionné —
- renommer, activer/désactiver ;
- éditer la liste d'étapes (route, cible via `<select>` alimenté par
  `GET /tours/targets`, titre, contenu), réordonner (↑/↓), ajouter,
  retirer ;
- « Enregistrer » → un seul `PATCH /:id` qui remplace tout (name/enabled +
  étapes rénumérotées `order` = index), erreurs API affichées telles quelles ;
- « Supprimer le scénario » (confirmation `window.confirm`) ;
- « Nouveau scénario » → formulaire clé + nom → `POST /`.

`admin-client.ts` gagne `getTourScenarios` / `getTourTargets` /
`createTourScenario` / `updateTourScenario` / `deleteTourScenario`.

Tests Cypress (`admin-tours.cy.ts`, 4) : liste (activés + désactivés,
nombre d'étapes) ; édition nom + réordonnancement d'étapes → un seul PATCH
avec la liste complète réordonnée ; création → POST `{key,name}` ;
suppression après confirmation → DELETE. 4/4 en local ; `pnpm build` +
`pnpm lint` verts.

Closes #44
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
kyuno merged commit 713d6c520d into main 2026-09-06 07:27:17 +02:00
Sign in to join this conversation.
No reviewers
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: kyuno/batchCooking#61
No description provided.