Repository navigation
Ajouter la recherche géographique avec proxy de géocodage (E-02) #30
Copy link
Copy link
Closed
Labels
area:mobileapps/mobileapps/mobileprio:P1HauteHautestatus:readySpec complète, prêt à coderSpec complète, prêt à codertype:featureNouvelle fonctionnalitéNouvelle fonctionnalité
Milestone
Description
Contexte
Epic : #10
Prérequis : #125, thème NativeWind généré depuis tokens.json et composants de base
Maquette : E-02 et E-03 planches 1 et 2 · validées le 2026-09-23
Filtres-et-Recherche · Ecrans · API · E-02 · D-001
Comportement attendu
- API :
GET /v1/geocode?q=proxy Mapbox Geocoding (pays FR, langue fr), types limités aux zones et aux stations : quartier, arrondissement, ville, station (D-010). Ni adresse ni point d'intérêt : Widoo cherche des parcours dans une zone. Cache mémoire ou Postgres 24 h, limitation de débit 30/min par IP. - Chaque zone renvoyée porte son nombre de parcours (comptage sur l'enveloppe de la zone), affiché dans la suggestion.
- Pilule de recherche de l'accueil (Ecrans › E-01) : point d'entrée vers cet écran. Texte visible « Qu'est-ce qu'on fait aujourd'hui ? », raccourci en « Qu'est-ce qu'on fait ? » à 150 % ; libellé VoiceOver « Rechercher une zone ou un parcours, champ de recherche ». Aucun autre ticket ne porte cette pilule.
- Mobile : écran de recherche avec suggestions au fil de la saisie (debounce), section « Autour de moi », dix recherches récentes stockées sur le téléphone (MMKV), résultats de parcours par titre en second (
/routes/search?q=à ajouter côté API avecILIKE). - Sélection d'une zone : recentrage de la carte sur la zone (environ 3 km), recherche dans la zone, nom de la zone affiché dans la pilule de recherche, et entrée dans les recherches récentes.
- Événement
search_text. - Mouvement (D-030, Direction-Artistique › Mouvement,
mappings.motion) : M-04, la sheet de recherche passe au cran plein avec le clavier.
Critères d'acceptation
- « Montmartre », « 75011 » et « République » donnent des zones pertinentes, avec leur nombre de parcours, et recentrent la carte
- Une adresse ou un point d'intérêt ne remonte aucune suggestion de zone
- Le jeton Mapbox utilisé pour le géocodage n'est jamais dans l'app
- Tests API sur le proxy (cache, limite)
- États conformes à Ecrans › E-02 : hors connexion, chargement, erreur partielle et erreur totale
- Erreur partielle : l'échec d'un groupe (zones ou parcours) laisse l'autre affiché, et Réessayer ne relance que le groupe en échec
- Zones (
/geocode) et parcours sont demandés en deux requêtes parallèles, chacune avec un délai de 5 s avant erreur - L'historique local retient dix zones, et seulement des zones
- Libellé du champ « Rechercher une zone ou un parcours », texte indicatif court « Zone ou parcours », lisible sans troncature à 150 %
- Chargements annoncés à VoiceOver (
accessibilityLiveRegionsur Android,announceForAccessibilitysur iOS) - Icônes d'interface lues par leur nom dans
mappings.uiIconsde tokens.json, aucune icône choisie en dur (D-025) - Durées, courbes et vibrations lues dans
mappings.motionde tokens.json, aucune valeur en dur ; « Réduire les animations » respecté (D-030)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
area:mobileapps/mobileapps/mobileprio:P1HauteHautestatus:readySpec complète, prêt à coderSpec complète, prêt à codertype:featureNouvelle fonctionnalitéNouvelle fonctionnalité
Activity
feat(mobile): add the search pill with the filters counter and the qu…
feat(mobile): add the search pill with the filters counter and the qu…
feat(mobile): add the search pill with the filters counter and the qu…
feat(mobile): add the search pill with the filters counter and the qu…
feat(mobile): add the search pill with the filters counter and the qu…
feat(mobile): add the search pill with the filters counter and the qu…
feat(mobile): add the search pill with the filters counter and the qu…
feat(mobile): add the search pill with the filters counter and the qu…
feat(mobile): add the search pill with the filters counter and the qu…
feat(mobile): add the search pill with the filters counter and the qu…
feat(mobile): add the search pill with the filters counter and the qu…
feat(mobile): add the search pill with the filters counter and the qu…
PaulThiberville commentedon Oct 6, 2026
🔨 Démarrage — plan :
Branche
issue/30-geographic-search, une seule PRFixes #30, en plusieurs commits autonomes.GeocodeQuery/GeocodeZone/GeocodeResult, règle de la zone cherchée (enveloppe de la zone, jamais moins de 3 km),qfacultatif de la recherche de parcours.GET /v1/geocode?q=: proxy Mapbox côté serveur (Geocoding v6 pour quartiers, arrondissements, villes et codes postaux ; Search Box filtrée sur les stations), pays FR, langue fr, biais sur Paris, sans adresse ni point d'intérêt. Nombre de parcours de chaque zone par la logique de/routes/search/count. Limite 30/min par IP, cache mémoire 24 h, clé lue dans la config de l'API (jamais renvoyée ni journalisée). Tests avec un faux client Mapbox.qsur/routes/searchet/count(ILIKEsur le titre, échappé, sans clusters).geocode(), délai par requête (5 s).geocode, nom dans la pilule avec croix),search_text.Niveau de risque attendu : 2 (nouvel endpoint, appel sortant, quota).
PaulThiberville commentedon Oct 8, 2026
📋 MANAGER (2026-10-08) : vérifié sur appareil réel (Redmi Note 9, build
previewcc1d6f4f, commit2c59f22) : Montmartre, 75011, République (station en tête), adresse sans zone, recadrage au choix d'une zone, zones récentes, hors connexion. Attestation de Paul sur #303. « Autour de moi » et retour du réseau : reportés à #319.PaulThiberville commentedon Oct 8, 2026
📋 MANAGER (2026-10-08) : le « Cache mémoire ou Postgres 24 h » du comportement attendu (et le test « cache » des critères) est obsolète. Décision D-081 (#306) : géocodage sans cache serveur au MVP, les résultats temporaires de Mapbox ne se conservent pas ;
/geocoderépondno-store. Le cache de 24 h reste derrièreMAPBOX_GEOCODING_PERMANENT=true, désactivé, question rouverte plus tard avec le budget.