c1b4ad5ad2
- lib/turnos.ts: crearTurno() compartido (valida servicio/jefe/slot); cliente/turnos POST lo reutiliza - lib/telefono.ts: normalización de teléfono (E.164 sin '+') para matchear el wa_id - lib/whatsapp-bot.ts: procesarMensaje(telefono, texto), state machine completa: identidad por teléfono + verificación por email registrado / alta nueva, elegir mecánico (botones) -> trabajo (letras) -> horario (letras, con "más") -> confirmar, crea turno sin auto/km; expiración 30min, "cancelar" global, manejo de inválidos y 409. Devuelve objetos-respuesta (texto/botones) -> independiente de Meta (lo traduce F0). - scripts/test-whatsapp-bot.ts + npm run test:bot: corre la máquina de estados con un Prisma en memoria (sin DB ni Meta), ejercitando scheduling y crearTurno reales. 27/27 OK. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
50 lines
1.2 KiB
JSON
50 lines
1.2 KiB
JSON
{
|
|
"name": "taller-turnos",
|
|
"version": "0.1.0",
|
|
"private": true,
|
|
"scripts": {
|
|
"dev": "next dev",
|
|
"build": "next build",
|
|
"start": "next start",
|
|
"lint": "next lint",
|
|
"db:migrate": "prisma migrate dev",
|
|
"db:push": "prisma db push",
|
|
"db:seed": "npx tsx prisma/seed.ts",
|
|
"db:studio": "prisma studio",
|
|
"test:bot": "tsx scripts/test-whatsapp-bot.ts"
|
|
},
|
|
"prisma": {
|
|
"seed": "npx tsx prisma/seed.ts"
|
|
},
|
|
"dependencies": {
|
|
"@prisma/adapter-pg": "^7.8.0",
|
|
"@prisma/client": "^7.8.0",
|
|
"@types/nodemailer": "^8.0.1",
|
|
"bcryptjs": "^3.0.3",
|
|
"googleapis": "^173.0.0",
|
|
"jose": "^6.2.3",
|
|
"jsonwebtoken": "^9.0.3",
|
|
"next": "14.2.35",
|
|
"next-auth": "^5.0.0-beta.25",
|
|
"nodemailer": "^6.10.1",
|
|
"prisma": "^7.8.0",
|
|
"react": "^18",
|
|
"react-dom": "^18",
|
|
"resend": "^6.14.0"
|
|
},
|
|
"devDependencies": {
|
|
"@types/bcryptjs": "^2.4.6",
|
|
"@types/jsonwebtoken": "^9.0.10",
|
|
"@types/node": "^20",
|
|
"@types/react": "^18",
|
|
"@types/react-dom": "^18",
|
|
"dotenv": "^17.4.2",
|
|
"eslint": "^8",
|
|
"eslint-config-next": "14.2.35",
|
|
"postcss": "^8",
|
|
"tailwindcss": "^3.4.1",
|
|
"tsx": "^4.22.4",
|
|
"typescript": "^5"
|
|
}
|
|
}
|