Repository navigation
Exposer et enregistrer le profil complet dans GET /me, PATCH /me et /config #385
Copy link
Copy link
Closed
Labels
area:apiapps/apiapps/apiprio:P0BloquantBloquantstatus:readySpec complète, prêt à coderSpec complète, prêt à codertype:featureNouvelle fonctionnalitéNouvelle fonctionnalité
Milestone
Description
Contexte
Epic : #6
Maquette : sans objet — API seule
API › Compte · API › Découverte (/config) · Compte-et-Monetisation · Modele-de-Donnees · E-09 · D-023
Issu du découpage de #38 (décision de Paul du 2026-10-13). La migration du profil (#126, PR #381 fusionnée le 2026-10-13) a créé les colonnes et tables ; ce ticket les expose et les enregistre. L'écran qui les consomme est #387.
Comportement attendu
PATCH /meaccepte, en plus des champs actuels (prénom, avatar,isPublic) :bio(150 caractères),neighborhood(facultatif),anecdotes(liste ordonnée[{ questionKey, answer }], 3 au plus, question unique parmi les questions actives, réponse de 150 caractères) etfeaturedRouteIds(3 au plus, ordonnés) ; le tout enregistré en une transaction ; 422validation_errorsinon.- Règle D-023 des parcours à la une (note MANAGER du 2026-10-13 sur Implémenter la connexion (E-10), le profil (E-09) et la suppression de compte #38) :
featuredRouteIdsn'accepte que des parcours publiés dont l'appelant est l'auteur ; la lecture fait la jointure surroutes.status = 'published'etroutes.author_id = user_id, pour ne jamais renvoyer un parcours sorti depublishedmême si sa ligne n'a pas encore été supprimée (suppression aux transitions : Gérer PUT /routes/:id/steps, submit, statuts et lien privé #48, Admin : lieux, parcours, import CSV et tableau de bord (A-04, A-05) #55, Construire la file de modération et ses endpoints (A-02) #53). GET /merenvoie le profil complet : bio, quartier, anecdotes (avec libellé de la question), parcours à la une (ordonnés), certification (critères avec valeur, seuil et état), en plus de ce qu'il renvoie déjà.GET /configexpose les questions d'anecdote actives (clé, libellé, ordre) et les seuils publics de la certification.localeetnotificationPrefsrestent portés par Migration : users.locale, users.notification_prefs, PATCH /me et POST /me/devices avec la langue #197 ;DELETE /mepar Aligner la suppression de compte sur D-025 et permettre la réinscription #128. Aucun événement produit dans ce ticket.
Critères d'acceptation
-
PATCH /meenregistre bio, quartier, anecdotes et parcours à la une en une transaction, etGET /merenvoie les valeurs enregistrées - 422 sur : bio ou réponse de plus de 150 caractères, plus de 3 anecdotes, question en double ou inactive, plus de 3 parcours à la une, parcours non publié ou d'un autre auteur
- Un échec de validation ne modifie aucun champ (transaction annulée), test à l'appui
-
GET /men'affiche jamais un parcours à la une sorti depublished, test à l'appui -
GET /configliste les questions actives dans l'ordre, sans les inactives - Schémas OpenAPI à jour, types partagés dans
packages/shared
Notes techniques
Nouveau comportement d'un endpoint authentifié, données persistées : niveau 2 probable, revue OWASP ciblée (contrôle d'accès sur les parcours à la une, validation des entrées).
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
area:apiapps/apiapps/apiprio:P0BloquantBloquantstatus:readySpec complète, prêt à coderSpec complète, prêt à codertype:featureNouvelle fonctionnalitéNouvelle fonctionnalité
Activity
PaulThiberville commentedon Oct 13, 2026
🔨 Démarrage — plan :
packages/shared:UpdateMeétendu (bio,neighborhood, nullables ;anecdotes,featuredRouteIds),Meétendu (bio, quartier, anecdotes avec libellé, parcours à la une ordonnés, certification : critères avec valeur, seuil et état),AppConfigétendu (questions d'anecdote actives, seuils de certification), règle des critères testée.apps/api/src/users: lecture et écriture du profil en une transaction ; questions actives et parcours publiés de l'appelant vérifiés dans la transaction (lignes verrouillées en lecture), lecture des parcours à la une avec jointurestatus = 'published'etauthor_id = user_id; valeurs de la certification (parcours vérifiés, note moyenne, parcours réalisés).GET /me,PATCH /me,GET /configet tests d'intégration surwidoo_test. Corps invalide : 422validation_error(règle D-071 du wiki API › Conventions : 400 pour une query, 422 pour un corps), alors que le gestionnaire d'erreurs répond aujourd'hui 400 à tout schéma invalide : aligné dans cette PR.Branche
issue/385-profile-me-config, une PRFixes #385, niveau 2.feat(api): keep the account language and the notification keys of the…