Skip to content

Admin : affiliation et clics de réservation (A-09) #344

Open

Description

@IlanAMG

Contexte

Epic : #5
Admin-Web › A-09 · Compte-et-Monetisation › Liens de réservation · programmes : #212
Décision : D-085 (cadrage du 2026-10-09)

Comportement attendu

  • 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

Activity

  1. added this to the v0.6 milestone on Oct 9, 2026
  2. Nascimento95 commented on Oct 16, 2026

    @Nascimento95
    Collaborator

    🔨 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

    1. Migration 0018 : affiliate_programs, booking_clicks, places.partner_booking_url et partner_program_id.
    2. Schémas partagés et règle du lien affiché (créateur d'abord, puis partenaire de Widoo).
    3. API : GET/POST/PATCH /admin/affiliate-programs.
    4. API : lien partenaire dans la fiche d'un lieu (PATCH /admin/places/:id).
    5. API : GET /go/:stepId (compte le clic, redirige en 302, limité en débit).
    6. API : la fiche d'un parcours renvoie le lien partenaire quand le créateur n'en a pas (bookingIsAffiliate à vrai).
    7. API : GET /admin/bookable-steps (origine du lien, clics sur 30 jours, filtre « sans lien partenaire »).
    8. Client API.
    9. 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.

  3. Nascimento95 commented on Oct 16, 2026

    @Nascimento95
    Collaborator

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

  4. PaulThiberville commented on Oct 19, 2026

    @PaulThiberville
    Collaborator

    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.

  5. Nascimento95 commented on Oct 20, 2026

    @Nascimento95
    Collaborator

    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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions