'use strict' /** * signup.js — portail self-service d'abonnement (STAGING, servi par le hub). * Parcours épuré type e-commerce : Forfait → Coordonnées → Récap → Confirmation. * Réutilise /api/catalog (existant). PAS publié sur Lovable tant que non validé. * * Routes publiques : * GET /signup → page (stepper) * POST /signup/submit → crée un Lead ERPNext + retourne la confirmation */ const { json, parseBody, erpFetch } = require('./helpers') async function createLead (body) { const name = [body.first_name, body.last_name].filter(Boolean).join(' ').trim() || 'Client web' const payload = { lead_name: name, email_id: body.email || '', mobile_no: body.phone || '', status: 'Lead', // résumé de la demande dans le titre de la requête pour le suivi staff request_type: 'Product Enquiry', } try { const r = await erpFetch('/api/resource/Lead', { method: 'POST', body: JSON.stringify(payload) }) if (r.status === 200 && r.data?.data) return r.data.data.name } catch (e) { /* best-effort */ } return null } const PAGE = `Abonnement Gigafibre
Chargement…
Gigafibre · propulsé par Targo
` async function handle (req, res, method, path) { if (path === '/signup' && method === 'GET') { res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' }); return res.end(PAGE) } if (path === '/signup/submit' && method === 'POST') { const b = await parseBody(req) const lead = await createLead(b) return json(res, 200, { ok: true, lead, plan: b.plan_name }) } return json(res, 404, { error: 'not found' }) } module.exports = { handle }