You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Exposer les routes « J'y suis » et « Passer cette étape » du parcours en cours #503
Epic : #14
Maquette : E-07 · validée le 2026-09-25 API › Favoris et programmation · Ecrans › E-07 · E-07 · D-029 · D-033 · D-095
Reste d'E-07 après #42 (PR #502, section « Ce qui n'est pas livré » ; Inbox). « J'y suis » n'atteint pas l'API (l'arrivée reste sur le téléphone, MMKV) et « Passer cette étape » n'a pas de route : les colonnes planned_steps.arrived_at et skipped_at existent depuis #129, le contrat des routes manque.
POST /me/planned/:id/steps/:stepId/arrived (« J'y suis ») : pose planned_steps.arrived_at une fois ; un second appel garde la première heure.
POST /me/planned/:id/steps/:stepId/skip (« Passer cette étape ») : pose skipped_at, l'étape ne compte pas comme faite ; 409 conflict sur une étape déjà faite.
DELETE /me/planned/:id/steps/:stepId/skip (« Annuler » du toast) : retire skipped_at, l'étape retrouve son état d'avant (en route, ou sur place si arrived_at est posé).
Ces routes, comme done : réponse 200 PlannedRoute à jour ; 409 conflict hors d'un Go in_progress ; 404 not_found pour une étape inconnue ou la programmation d'un autre compte ; heure posée par l'API à la réception ; Cache-Control: no-store.
GET /me/planned et GET /me/planned/:id portent, dans steps, { stepId, arrivedAt, doneAt, skippedAt } de chaque étape : un autre téléphone du même compte voit « Vous y êtes » ou « Passée ».
Schémas dans packages/shared, sans seconde définition.
Critères d'acceptation
« J'y suis » écrit arrived_at une seule fois ; l'heure reste la première (test API)
« Passer » écrit skipped_at, son annulation le retire et rend l'état d'avant ; « Passer » une étape déjà faite répond 409 (tests API)
409 hors d'un Go in_progress, 404 pour une étape inconnue ou la programmation d'un autre compte (tests API)
La lecture d'une programmation porte arrived_at et skipped_at de chaque étape, typés dans packages/shared
La page API du wiki et le code disent la même chose (routes, codes d'erreur)
Notes techniques
Nouvel endpoint authentifié : niveau 2 attendu (revue OWASP ciblée : contrôle de propriété de la programmation).
nextStepMapsUrl (apps/api/src/planned/go.ts) saute déjà les étapes passées.
L'app consomme ces routes dans le ticket mobile qui suit (bloqué par celui-ci).
📋 MANAGER, 2026-10-19 — contrat écrit par D-095 (décision d'Ilan sur #418) : chemins, réponses et erreurs reportés dans le corps (POST .../arrived, POST et DELETE .../skip, 409 sur « Passer » une étape faite). needs-design → status:ready, dépendance sur #418 retirée, Status Prêts, Sprint 1. L'ordre de GET /me/planned (segment) est à part, dans #533. Niveau 2 attendu (nouveaux endpoints authentifiés).
Chef de projet (contrôle du 19/10/2026 sur D-095) : point ouvert, en attente d'une décision d'Ilan, sans effet sur status:ready.
L'heure de « J'y suis », « Étape suivante » et « Passer » est posée par l'API à la réception. Une action gardée hors connexion (#504) porte donc l'heure du retour du réseau : « Fait à » faux sur un autre téléphone, durées d'étape faussées dans les analytics.
Proposition soumise à Ilan : champ facultatif occurredAt dans le corps des trois routes, retenu s'il tombe entre le départ du Go et l'heure de réception, sinon l'heure de réception. Ajout sans rupture : ce ticket peut partir tel quel, le champ s'ajoutera s'il est validé.
Activity
PaulThiberville commentedon Oct 19, 2026
📋 MANAGER, 2026-10-19 — contrat écrit par D-095 (décision d'Ilan sur #418) : chemins, réponses et erreurs reportés dans le corps (
POST .../arrived,POSTetDELETE .../skip, 409 sur « Passer » une étape faite).needs-design→status:ready, dépendance sur #418 retirée, Status Prêts, Sprint 1. L'ordre deGET /me/planned(segment) est à part, dans #533. Niveau 2 attendu (nouveaux endpoints authentifiés).IlanAMG commentedon Oct 19, 2026
Chef de projet (contrôle du 19/10/2026 sur D-095) : point ouvert, en attente d'une décision d'Ilan, sans effet sur
status:ready.L'heure de « J'y suis », « Étape suivante » et « Passer » est posée par l'API à la réception. Une action gardée hors connexion (#504) porte donc l'heure du retour du réseau : « Fait à » faux sur un autre téléphone, durées d'étape faussées dans les analytics.
Proposition soumise à Ilan : champ facultatif
occurredAtdans le corps des trois routes, retenu s'il tombe entre le départ du Go et l'heure de réception, sinon l'heure de réception. Ajout sans rupture : ce ticket peut partir tel quel, le champ s'ajoutera s'il est validé.