Skip to content

Exposer les routes « J'y suis » et « Passer cette étape » du parcours en cours #503

Open

Description

@PaulThiberville

Contexte

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.

Contrat écrit le 2026-10-16 par D-095 (décision d'Ilan sur #418) dans API › Favoris et programmation. L'ordre de GET /me/planned (segment) est porté à part par #533.

Comportement attendu

  • 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).

Activity

  1. added this to the v0.4 milestone on Oct 16, 2026
  2. added
    status:readySpec complète, prêt à coder
    and removed
    needs-designQuestion ou maquette à produire en mode DESIGN
    on Oct 19, 2026
  3. PaulThiberville commented on Oct 19, 2026

    @PaulThiberville
    CollaboratorAuthor

    📋 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).

  4. IlanAMG commented on Oct 19, 2026

    @IlanAMG
    Member

    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é.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions