Repository navigation
Exposer GET /users/:id/profile pour le profil public de créateur (E-16) #471
Copy link
Copy link
Closed
Labels
area:apiapps/apiapps/apiprio:P1HauteHautestatus:readySpec complète, prêt à coderSpec complète, prêt à codertype:featureNouvelle fonctionnalitéNouvelle fonctionnalité
Milestone
Description
Contexte
Epic : #6
Maquette : E-16 · validée le 2026-09-24 (ticket API : la maquette fixe les données affichées)
API › Découverte (ligne GET /users/:id/profile) · Compte-et-Monetisation › Profil public · Ecrans › E-16 · E-16 · D-023, D-025, D-056, D-091
#65 porte l'écran E-16 (PR brouillon #469) et, dans son « Comportement attendu », l'endpoint GET /users/:id/profile, qui n'existe pas dans apps/api (découverte de CODE). Sans lui, l'app affiche « Ce profil n'est pas disponible » pour tout créateur, et les critères 404 de #65 ne peuvent pas être tenus. Ce ticket porte la part API ; #65 est bloqué par lui.
Comportement attendu
GET /v1/users/:id/profile, public, jeton facultatif (cards dépendantes de l'appelant, D-075, comme/routes/search), selon la ligne de la page API : avatar, prénom, membre depuis, quartier, bio ;certifiedetcertification(critères avec valeur, seuil et état) ; chiffresroutesPublished,routesCompleted,ratingAvg,verifiedPlaces(chacunnulls'il n'existe pas,verifiedPlacesnullà zéro, D-056) ; anecdotes dans l'ordre (questionKey, libellé, réponse) ; parcours à la une dans l'ordre, en cards ; parcours publiés en cards, querysort=recent|rating|duration,moods[],cursor;moodCountspour les chips.- 404
not_foundsiis_public = false, si le compte est supprimé (anonymisé ou purgé, D-025) ou inconnu : même réponse dans les trois cas. - Un compte supprimé n'a plus de lien vers un profil : ses parcours publiés gardent
author: nulldans les cards et la fiche (« Membre Widoo », D-025), sans identifiant qui mènerait à/users/:id/profile. - Seuls les parcours publiés du créateur apparaissent : ni brouillon, ni privé, ni retiré.
- Forme de réponse : reprendre le schéma
PublicProfiledepackages/shared/src/schemas/public-profile.tsposé par la PR feat(mobile): afficher le profil public de créateur (E-16) #469, ou le corriger dans la même PR que l'endpoint s'il s'écarte de la page API.
Critères d'acceptation
- Tests d'intégration : profil public complet (identité, chiffres, anecdotes, à la une, parcours) conforme au schéma partagé
- Tests : 404 pour un profil masqué, pour un compte supprimé et pour un identifiant inconnu, réponse identique
- Tests : parcours publiés en cards, triés par
recent,ratingetduration, filtrés parmoods[], paginés parcursorsans doublon ni trou ; brouillons, privés et retirés absents - Tests :
moodCountscompte les parcours publiés par ambiance ;verifiedPlacescompte les lieux distincts confirmés et vautnullà zéro - Test : après
DELETE /me, le profil répond 404 et les cards de ses parcours publiés ontauthor: null - Ligne
GET /users/:id/profilede la page API vérifiée contre la réponse livrée ; tout écart signalé sur l'Inbox 📥 Inbox — Triage #4
Notes techniques
- Réutiliser la certification de
apps/api/src/users/certification.tset la card de recherche de/routes/search. routesCompletedet le critère « parcours réalisés » de la certification viennent du calcul de Calculer les parcours réalisés depuis les sorties terminées #423 (sorties d'autres utilisateurs sur ses parcours, D-091). Si Calculer les parcours réalisés depuis les sorties terminées #423 n'est pas fusionné au démarrage,routesCompletedvautnull; le dire dans la PR.- Hors périmètre : le profil de Widoo (compte d'équipe sans identifiant dans les cards, Inbox), en attente de DESIGN ; l'accès du propriétaire à son profil masqué (Exposer à mon profil (E-09) mes parcours publiés, leurs ambiances et mes lieux vérifiés #421).
- Nouvel endpoint public qui lit des données de comptes : revue OWASP (A01, exposition de profils masqués ou supprimés) et niveau à annoncer dans la PR.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
area:apiapps/apiapps/apiprio:P1HauteHautestatus:readySpec complète, prêt à coderSpec complète, prêt à codertype:featureNouvelle fonctionnalitéNouvelle fonctionnalité
Activity
PaulThiberville commentedon Oct 15, 2026
🔨 Démarrage — plan :
issue/471-public-creator-profile-api. Premier commit : le schéma partagéPublicProfileet le client de la PR feat(mobile): afficher le profil public de créateur (E-16) #469 repris tels quels (commit090802bdeissue/65-public-creator-profile), pour que feat(mobile): afficher le profil public de créateur (E-16) #469 le saute au rebase.packages/shared: schéma strict de la query (sort=recent|rating|duration,moods[],cursor,limit).apps/api: page de cards extraite de la recherche (mêmetoCard,cardColumns,routeViewerOf/canAccessRoute, curseur opaque), puisGET /v1/users/:id/profile, jeton facultatif, cache comme/routes/search.not_foundidentique pour profil masqué, compte supprimé et identifiant inconnu.routesCompletedànull(Calculer les parcours réalisés depuis les sorties terminées #423 encore ouvert) ;verifiedPlacesànull(pas encore de tableplace_signalsdans le schéma).PaulThiberville commentedon Oct 15, 2026
Vérification de staging, 2026-10-15, consignée par MANAGER.
deploy-staging.ymlvert surbecf89e(run 38708541976) et sur les déploiements suivants, dontc0be04e;GET /v1/healthde staging répond{"status":"ok","database":"up"}; un identifiant inconnu répond 404.98b537be(Redmi Note 9, vers 13:40) : profil public E-16 ouvert depuis une card, servi par cet endpoint.Status du Project : Terminés.