Skip to content

Noter un parcours en fin de sortie (E-15) et afficher les avis #64

Closed

Description

@IlanAMG

Contexte

Epic : #14
Maquette : E-15 · validée le 2026-09-25
Creation-et-Moderation · Ecrans · E-15, E-05, E-08 · D-002 · D-034

Comportement attendu

  • API : table route_ratings, POST /me/planned/:id/rating (exige un Go terminé, crée ou met à jour), GET /routes/:id/ratings, recalcul de routes.stats.rating_avg et rating_count, entrée en file de modération sous 2,5 avec 5 avis.
  • Mobile : écran E-15 (D-029, Ecrans › E-15) : récapitulatif, note facultative, commentaire proposé une fois la note donnée (280 caractères), lieux non vérifiés, envoi différé hors ligne ; plus de note personnelle. « Notez ce parcours » dans Passés pour noter plus tard ; modification depuis Passés ; avis sur la fiche (3 derniers puis tout, D-013) ; note sur les cards. Un parcours arrêté (stopped) ne propose pas de note.
  • Événement route_rated.
  • Mouvement (D-030, Direction-Artistique › Mouvement, mappings.motion) : E-15 suit M-02 (modale qui monte) et M-08 (changements d'état).
  • Planche 2 (D-033, Ecrans › E-15) : sortie close automatiquement à 4:00 le lendemain, E-15 ouverte par la notification du matin (Clore automatiquement les sorties à 4:00 et envoyer la notification du matin #140) ; sortie partielle ; la note s'ouvre dès que la moitié des étapes est faite, même si d'autres ont été passées ; un parcours déjà noté affiche sa note, modifiable.
  • Planche 3 (D-034, Ecrans › E-15) : étoiles non choisies en contour #7F8A9C (token control-border, 3,49:1) au lieu d'un plein gris clair, libellé de la note affiché ; texte à 150 % : tuiles et barre collée plafonnées à 1,3, titre, commentaire et lieux qui passent à la ligne, compteur « 100 / 280 » jamais coupé, « Terminer » collé en bas. Lecteur d'écran selon Ecrans › E-15 : titre en en-tête, focus dessus à l'ouverture par la notification ; tuiles en liste ; « Votre note » en groupe radio, chaque étoile « 4 sur 5, Très bien » ; champ « Un mot pour les autres, facultatif » avec son compteur ; Oui et Signaler des lieux en hitSlop jusqu'à 44 px.

Critères d'acceptation

  • Impossible de noter sans Go terminé (test API)
  • Une seconde réalisation met à jour la note, pas de doublon
  • La moyenne sur la card reflète la note dans la seconde qui suit l'envoi (invalidation du cache)
  • Chaque avis affiche sa note en chiffre après une étoile (« ★ 5 »), sur la fiche (Ecrans › E-05) comme dans la liste complète
  • Terminer sans noter est possible, et « Notez ce parcours » apparaît alors dans Passés
  • Aucune note personnelle, ni en base ni à l'écran
  • Durées, courbes et vibrations lues dans mappings.motion de tokens.json, aucune valeur en dur ; « Réduire les animations » respecté (D-030)
  • La note s'ouvre dès que la moitié des étapes est faite, même si d'autres ont été passées
  • Une note existante s'affiche et se modifie
  • Étoiles non choisies en contour #7F8A9C, jamais en plein gris ; la note choisie affiche son libellé (D-034)
  • À 150 % de texte système : tuiles et barre collée plafonnées à 1,3, compteur « 100 / 280 » jamais coupé
  • Libellés et annonces du lecteur d'écran conformes à Ecrans › E-15
  • Émet route_rated avec route_id, rating, has_comment et source (go_end depuis E-15, past depuis « Notez ce parcours » ou la modification dans Passés) (typé dans packages/shared/src/analytics.ts depuis Instrumenter les événements analytics de la découverte #33)
  • Les notes et avis de l'utilisateur figurent dans GET /v1/me/export (MyDataExport dans packages/shared, users/export-activity.ts) ; le test apps/api/src/users/export.test.ts passe

Notes techniques

Activity

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

    @IlanAMG
    MemberAuthor

    D-036 (https://github.com/Inprogress-Agency/widoo-app/wiki/Design-Changelog) : « Signaler » depuis E-15 ouvre la même sheet que E-07 (voir #42).

  4. PaulThiberville commented on Sep 29, 2026

    @PaulThiberville
    Collaborator

    📋 MANAGER — critère venu de #33 : la PR #159 a typé et testé ces événements dans le catalogue strict packages/shared/src/analytics.ts, sans les émettre, faute d'écran. L'émission revient au ticket qui construit l'écran : critère ajouté au corps de ce ticket.

  5. IlanAMG commented on Sep 29, 2026

    @IlanAMG
    MemberAuthor

    Traduction automatique (D-076, #203) : son affichage sur cet écran est livré à part, en v0.5, dans #269. Rien à ajouter ici.

  6. PaulThiberville commented on Oct 14, 2026

    @PaulThiberville
    Collaborator

    Bloqué par #42 : l'écran E-15 s'ouvre par « Terminer la sortie » du parcours en cours (E-07), que #42 construit ; dépendance blocked_by déclarée le 2026-10-14.

  7. added
    status:blockedBloqué, voir commentaire ⛔
    and removed
    status:readySpec complète, prêt à coder
    on Oct 14, 2026
  8. PaulThiberville commented on Oct 14, 2026

    @PaulThiberville
    Collaborator

    Ajout d'un critère d'acceptation, d'après une découverte de CODE sur #206 (PR #449) : l'export des données de GET /v1/me/export doit couvrir toute nouvelle donnée personnelle. Le test apps/api/src/users/export.test.ts échoue dès qu'une nouvelle colonne pointe vers users sans être exportée ni écartée. Étendre MyDataExport (packages/shared) et users/export-activity.ts dans ce ticket. Pour les photos : l'export ne donne aujourd'hui que les photos dont le chemin est une URL https ; un chemin de bucket demandera une URL signée ou publique.

  9. added
    status:readySpec complète, prêt à coder
    and removed
    status:blockedBloqué, voir commentaire ⛔
    on Oct 16, 2026
  10. PaulThiberville commented on Oct 16, 2026

    @PaulThiberville
    Collaborator

    📋 MANAGER, 2026-10-16 — plus bloqué : son seul bloqueur, #42, est fermé (PR #502) ; la dépendance fermée reste listée pour l'historique et ne bloque plus. Les critères restent tenables sans la route « Passer » (#503) : la règle « la note s'ouvre dès la moitié des étapes faites, même si d'autres ont été passées » se teste avec skipped_at en base.

    Ce qu'il attend : rien d'autre. Il porte lui-même l'API des notes (route_ratings, POST /me/planned/:id/rating, GET /routes/:id/ratings) avec E-15. Périmètre précisé dans les notes techniques : le bloc « Lieux non vérifiés » part dans #505 (attend #49), « Terminer » hors connexion côté Go dans #507.

  11. PaulThiberville commented on Oct 16, 2026

    @PaulThiberville
    Collaborator

    🔨 Démarrage — plan :

    1. API : table route_ratings (migration additive 0015), POST /v1/me/planned/:id/rating (Go completed à moitié des étapes faites, une note par utilisateur et par parcours, créée ou mise à jour), GET /v1/routes/:id/ratings (avis visibles, paginés), recalcul de routes.stats, signalement low_rating (D-087), effacement avec le compte et export (MyDataExport).
    2. Client : rateRoute, listRouteRatings dans packages/api-client.
    3. Mobile : E-15 à la place du toast de « Terminer la sortie », note facultative, commentaire de 280 caractères, sortie partielle, note existante modifiable, envoi différé hors connexion, route_rated, invalidation des cards et de la fiche.

    Branche issue/64-rate-route-end. Hors périmètre, selon les notes : « Lieux non vérifiés » (#505), « Terminer » hors connexion (#507). Point d'attention : Passés (E-08) n'existe pas encore (#43) ; je le signalerai dans la PR.

  12. PaulThiberville commented on Oct 16, 2026

    @PaulThiberville
    Collaborator

    PR ouverte : #513 (niveau 2). Passés (E-08) n'existant pas encore, « Notez ce parcours » et la modification depuis Passés restent à monter dans #43 ; l'API et l'écran sont prêts (voir la PR).

  13. PaulThiberville commented on Oct 16, 2026

    @PaulThiberville
    Collaborator

    📋 MANAGER, 2026-10-16 — bilan de PR #513 (niveau 2, migration additive 0015_add_route_ratings, fusionnée en d2a9207).

    Staging : deploy-staging.yml sur d2a9207 vert, étape « Migrate database » comprise ; run sur 836bb50 vert aussi. Status laissé en « À déployer » : la recette sur appareil et VoiceOver / TalkBack réels restent à faire (#524). Le passage en production attend l'accord de l'opérateur (niveau 2).

    Tenu par la PR (tests et recette sur émulateur et simulateur) : note impossible sans Go terminé, mise à jour sans doublon, moyenne des cards dans la seconde, « ★ 5 » sur la liste complète des avis, aucune note personnelle, règle de la moitié avec étapes passées, note existante modifiable, étoiles en contour control-border et libellé, 150 % plafonné, route_rated typé, export RGPD.

    Tenu en partie, avec renvoi :

    • « Notez ce parcours » dans Passés et la modification depuis Passés : livrés par #43 (PR #514), route_rated avec source: past.
    • Les trois derniers avis sur la fiche (E-05) : la fiche lit encore les données de démonstration, ils attendent GET /routes/:id de #36. La liste complète lit déjà l'API.
    • Lecteur d'écran conforme à E-15 : vérifié dans l'arbre d'accessibilité seulement ; trait « en-tête » parasite sur iOS suivi dans #521, VoiceOver et TalkBack réels à la recette humaine.
    • Hors du ticket, déjà suivis : « Lieux non vérifiés » (#505), « Terminer » hors connexion côté Go (#507), « Votre sortie d'hier » avec la notification du matin (#140).
    • Choix de la PR à confirmer par Ilan (note masquée hors moyenne, durée depuis l'heure prévue, avis sans prénom non listé) : #523.
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