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).
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).