feat(api): migrate Worker mva-hubspot-proxy → mva-api /leads/* routes #12

Merged
serge merged 1 commits from feat/migrate-worker-to-mva-api into main 2026-05-10 14:02:19 +03:00
Owner

Mission

Le Cloudflare Worker mva-hubspot-proxy était une solution temporaire car le panel admin AdminJS n'était pas encore dispo. Maintenant qu'AdminJS marche (= confirmé par Mélissa), on rapatrie tout le flow inscription côté MVA backend.

Changements

  • js/form-handler.js : WORKER_PROXY_URL → API_BASE_URL = https://api.mva.mind4solutions.com

    • checkExistingContact : POST /leads/check-email
    • setupContactForm : POST /leads/request-verification
    • sendWelcomeBackEmail : POST /leads/welcome-back
  • js/confirmation.js : POST /leads/verify-token

Inchangé

Les forms HTML, IDs des éléments, validation côté client, gestion Turnstile, UX success/error — tous inchangés. Seules les URLs API changent.

Backend (PR #44 mva-prestige-v2)

Les routes mva-api /leads/* sont déployées séparément avec :

  • Validation Zod + Turnstile + rate limit
  • DB Postgres (leads + leads_pending) remplace HubSpot Contacts + KV
  • Resend pour les emails (= unification écosystème M4S)
  • AdminJS Resource leads pour Mélissa CRUD

Cutover

  1. ⚠️ Merger PR #44 mva-prestige-v2 EN PREMIER + deploy backend VPS
  2. Run script node scripts/migrate-hubspot-to-postgres.js pour migrer les 4 contacts HubSpot vers Postgres (Mélissa MVA-001, Régina MVA-002, Sanico MVA-003, Haingo KORA)
  3. Test endpoints mva-api via curl avant de switcher le site
  4. Merger ensuite cette PR + redeploy site VPS (bash deploy.sh sur serge/site-mva-global-fret)
  5. Test end-to-end : nouveau form contact site → email validation Resend → click link → welcome email avec ref → AdminJS Mélissa voit le nouveau lead

Le Worker Cloudflare mva-hubspot-proxy reste up jusqu'à validation E2E (= rollback safety net), puis disabled à J+7.

## Mission Le Cloudflare Worker `mva-hubspot-proxy` était une **solution temporaire** car le panel admin AdminJS n'était pas encore dispo. Maintenant qu'AdminJS marche (= confirmé par Mélissa), on rapatrie tout le flow inscription côté MVA backend. ## Changements - `js/form-handler.js` : WORKER_PROXY_URL → API_BASE_URL = `https://api.mva.mind4solutions.com` - checkExistingContact : POST `/leads/check-email` - setupContactForm : POST `/leads/request-verification` - sendWelcomeBackEmail : POST `/leads/welcome-back` - `js/confirmation.js` : POST `/leads/verify-token` ## Inchangé Les forms HTML, IDs des éléments, validation côté client, gestion Turnstile, UX success/error — tous inchangés. Seules les URLs API changent. ## Backend (PR #44 mva-prestige-v2) Les routes mva-api `/leads/*` sont déployées séparément avec : - Validation Zod + Turnstile + rate limit - DB Postgres (`leads` + `leads_pending`) remplace HubSpot Contacts + KV - Resend pour les emails (= unification écosystème M4S) - AdminJS Resource `leads` pour Mélissa CRUD ## Cutover 1. ⚠️ **Merger PR #44 mva-prestige-v2 EN PREMIER** + deploy backend VPS 2. **Run script** `node scripts/migrate-hubspot-to-postgres.js` pour migrer les 4 contacts HubSpot vers Postgres (Mélissa MVA-001, Régina MVA-002, Sanico MVA-003, Haingo KORA) 3. **Test endpoints** mva-api via curl avant de switcher le site 4. **Merger ensuite cette PR** + redeploy site VPS (`bash deploy.sh` sur `serge/site-mva-global-fret`) 5. **Test end-to-end** : nouveau form contact site → email validation Resend → click link → welcome email avec ref → AdminJS Mélissa voit le nouveau lead Le Worker Cloudflare `mva-hubspot-proxy` reste up jusqu'à validation E2E (= rollback safety net), puis disabled à J+7.
serge added 1 commit 2026-05-10 12:35:05 +03:00
Le Cloudflare Worker hubspot-proxy était une solution temporaire car
le panel admin AdminJS n'était pas encore disponible. Maintenant qu'
AdminJS marche, on rapatrie tout le flow inscription côté MVA backend.

## Changements

- `js/form-handler.js`
  - WORKER_PROXY_URL → API_BASE_URL = https://api.mva.mind4solutions.com
  - checkExistingContact : POST /leads/check-email
    (response shape : {exists, firstname, reference_client})
  - setupContactForm : POST /leads/request-verification
  - sendWelcomeBackEmail : POST /leads/welcome-back

- `js/confirmation.js`
  - WORKER_PROXY_URL → API_BASE_URL
  - POST /leads/verify-token (= au lieu de Worker action verifyToken)
  - Detection token expiré/invalide via code INVALID_OR_EXPIRED

## Aucun changement HTML

Les forms HTML, IDs des éléments, validation côté client, gestion
Turnstile sont tous inchangés. Seules les URLs API changent.

## Côté backend (PR #44 mva-prestige-v2)

Les routes mva-api /leads/* sont déployées séparément avec :
- Validation Zod + Turnstile + rate limit
- DB Postgres (table leads + leads_pending) remplace HubSpot Contacts + KV
- Resend pour les emails (= unification écosystème M4S)
- AdminJS Resource leads pour Mélissa CRUD

## Cutover

Cette PR doit être merged + déployée APRÈS la migration backend
(PR #44) + après le run du script migrate-hubspot-to-postgres.js
(= les 4 contacts HubSpot existants en DB).
serge merged commit 61397720e8 into main 2026-05-10 14:02:19 +03:00
Sign in to join this conversation.
No reviewers
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: serge/site-mva-global-fret#12
No description provided.