You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Admin : affiliation et clics de réservation (A-09) #344
UI : programmes d'affiliation, lien partenaire de Widoo par lieu, liste des étapes réservables avec l'origine du lien et les clics sur 30 jours, filtre « lieux réservables sans lien partenaire ».
API : GET/POST/PATCH /admin/affiliate-programs, PATCH /admin/places/:id (partner_booking_url, partner_program_id), GET /admin/bookable-steps ; endpoint public GET /go/:stepId qui enregistre le clic dans booking_clicks et redirige (302) vers le lien affiché (créateur d'abord, D-048).
Côté app (Paul, ticket lié) : le bouton « Réserver » ouvre /go/:stepId.
Critères d'acceptation
Un clic sur « Réserver » est compté puis redirigé en moins de 200 ms
Le lien du créateur passe avant le lien partenaire de Widoo
🔨 Démarrage — branche issue/344-affiliation, empilée sur issue/348-settings-and-log (#500), au bout de la pile #363, #365, #398, #479, #499.
Niveau de risque proposé : 3 (nouvelle table et migration 0018, endpoint public non authentifié qui redirige) : level:3, revue OWASP, la fusion attend la demande de l'opérateur.
Plan en commits autonomes
Migration 0018 : affiliate_programs, booking_clicks, places.partner_booking_url et partner_program_id.
Schémas partagés et règle du lien affiché (créateur d'abord, puis partenaire de Widoo).
API : GET/POST/PATCH /admin/affiliate-programs.
API : lien partenaire dans la fiche d'un lieu (PATCH /admin/places/:id).
API : GET /go/:stepId (compte le clic, redirige en 302, limité en débit).
API : la fiche d'un parcours renvoie le lien partenaire quand le créateur n'en a pas (bookingIsAffiliate à vrai).
API : GET /admin/bookable-steps (origine du lien, clics sur 30 jours, filtre « sans lien partenaire »).
Client API.
Admin : programmes. 10. Admin : étapes réservables. 11. Admin : lien partenaire dans le formulaire du lieu.
Décisions de l'opérateur : un programme inactif n'est pas utilisé ; l'éditeur et l'admin modifient programmes et liens partenaires ; l'API remplace le lien de la fiche par le lien partenaire quand le créateur n'en a pas (l'app n'a rien à changer).
Hors périmètre : le bouton « Réserver » qui appelle /go/:stepId est le ticket mobile #345 (Paul) ; sans lui, les liens partenaires s'affichent mais ne sont pas comptés.
🔎 PR ouverte : #501 (niveau 3, label level:3, base issue/348-settings-and-log). La fusion attend la demande de l'opérateur.
Vérification humaine : Marco a testé en local le 2026-10-16, sur le contenu de la PR avant son découpage en commits (identique à b166abd), dans l'admin connecté et dans le navigateur :
Programmes : liste, panneau, ajout, nom déjà pris refusé, modification, désactivation et réactivation.
Étapes réservables : origines des liens, clics sur 30 jours, filtre « Lieux sans lien partenaire », lien vers la fiche d'un lieu.
Fiche d'un lieu : lien partenaire et programme ; un lien en http:// est refusé.
/v1/go/:stepId : un clic sur La Sainte-Chapelle redirige vers son site et le compteur de l'étape augmente de 1 ; un identifiant inconnu donne un 404 sans redirection.
Il a jugé que « c'est ok ».
Critères d'acceptation : tenus et testés, le clic compté puis redirigé en moins de 200 ms, et le lien du créateur avant le lien partenaire. Non démontrable dans l'app : l'affichage du lien partenaire dans la fiche d'un parcours (GET /routes/:id n'existe pas, #36) et le bouton « Réserver » qui appelle /go (#345, Paul).
Point de raccord, 2026-10-19, MANAGER (découverte de CODE pendant #36, PR #536) : la fiche GET /v1/routes/:id sert pour l'instant le lien du créateur et bookingIsAffiliate de l'étape, parce que resolveBookingLink arrive avec la PR #501. Une fois #501 fusionnée, il reste à passer chaque étape complète de la fiche par resolveBookingLink dans apps/api/src/sheet/build.ts (critère non tenu de #36) : dans la PR #501 après rebase sur main, ou par un ticket de suite à demander sur l'Inbox.
Point de raccord de MANAGER traité (CODE, 2026-10-20) dans #501, commit feat(api): serve on the route sheet the booking link of resolveBookingLink (A-09) : après rebase sur main, GET /v1/routes/:id passe chaque étape par resolveBookingLink (apps/api/src/sheet/build.ts, fonction sheetBookingOf) : lien du créateur, puis lien partenaire de Widoo sauf programme coupé, https seulement, bookingIsAffiliate vrai pour un lien partenaire. Tests unitaires et d'API (route-sheet-booking.test.ts). Le critère « le lien de réservation de chaque étape vient de resolveBookingLink » du ticket #36 est donc tenu par cette PR. Pas de vérification humaine : l'écran de l'app n'est pas branché sur cette fiche.
Activity
Nascimento95 commentedon Oct 16, 2026
🔨 Démarrage — branche
issue/344-affiliation, empilée surissue/348-settings-and-log(#500), au bout de la pile #363, #365, #398, #479, #499.Niveau de risque proposé : 3 (nouvelle table et migration
0018, endpoint public non authentifié qui redirige) :level:3, revue OWASP, la fusion attend la demande de l'opérateur.Plan en commits autonomes
0018:affiliate_programs,booking_clicks,places.partner_booking_urletpartner_program_id.GET/POST/PATCH /admin/affiliate-programs.PATCH /admin/places/:id).GET /go/:stepId(compte le clic, redirige en 302, limité en débit).bookingIsAffiliateà vrai).GET /admin/bookable-steps(origine du lien, clics sur 30 jours, filtre « sans lien partenaire »).Décisions de l'opérateur : un programme inactif n'est pas utilisé ; l'éditeur et l'admin modifient programmes et liens partenaires ; l'API remplace le lien de la fiche par le lien partenaire quand le créateur n'en a pas (l'app n'a rien à changer).
Hors périmètre : le bouton « Réserver » qui appelle
/go/:stepIdest le ticket mobile #345 (Paul) ; sans lui, les liens partenaires s'affichent mais ne sont pas comptés.Nascimento95 commentedon Oct 16, 2026
🔎 PR ouverte : #501 (niveau 3, label
level:3, baseissue/348-settings-and-log). La fusion attend la demande de l'opérateur.Vérification humaine : Marco a testé en local le 2026-10-16, sur le contenu de la PR avant son découpage en commits (identique à
b166abd), dans l'admin connecté et dans le navigateur :http://est refusé./v1/go/:stepId: un clic sur La Sainte-Chapelle redirige vers son site et le compteur de l'étape augmente de 1 ; un identifiant inconnu donne un 404 sans redirection.Il a jugé que « c'est ok ».
Critères d'acceptation : tenus et testés, le clic compté puis redirigé en moins de 200 ms, et le lien du créateur avant le lien partenaire. Non démontrable dans l'app : l'affichage du lien partenaire dans la fiche d'un parcours (
GET /routes/:idn'existe pas, #36) et le bouton « Réserver » qui appelle/go(#345, Paul).PaulThiberville commentedon Oct 19, 2026
Point de raccord, 2026-10-19, MANAGER (découverte de CODE pendant #36, PR #536) : la fiche
GET /v1/routes/:idsert pour l'instant le lien du créateur etbookingIsAffiliatede l'étape, parce queresolveBookingLinkarrive avec la PR #501. Une fois #501 fusionnée, il reste à passer chaque étape complète de la fiche parresolveBookingLinkdansapps/api/src/sheet/build.ts(critère non tenu de #36) : dans la PR #501 après rebase surmain, ou par un ticket de suite à demander sur l'Inbox.Nascimento95 commentedon Oct 20, 2026
Point de raccord de MANAGER traité (CODE, 2026-10-20) dans #501, commit
feat(api): serve on the route sheet the booking link of resolveBookingLink (A-09): après rebase surmain,GET /v1/routes/:idpasse chaque étape parresolveBookingLink(apps/api/src/sheet/build.ts, fonctionsheetBookingOf) : lien du créateur, puis lien partenaire de Widoo sauf programme coupé, https seulement,bookingIsAffiliatevrai pour un lien partenaire. Tests unitaires et d'API (route-sheet-booking.test.ts). Le critère « le lien de réservation de chaque étape vient deresolveBookingLink» du ticket #36 est donc tenu par cette PR. Pas de vérification humaine : l'écran de l'app n'est pas branché sur cette fiche.