70 lines
2.5 KiB
TypeScript
70 lines
2.5 KiB
TypeScript
import { NextResponse } from 'next/server';
|
|
import { dataService } from '@/lib/data-service';
|
|
import { otpStore } from '@/lib/otp-store';
|
|
import { sendWhatsAppMessage } from '@/lib/evolution-api';
|
|
|
|
export async function POST(request: Request) {
|
|
try {
|
|
const { identifier, name } = await request.json();
|
|
if (!identifier) {
|
|
return NextResponse.json({ success: false, error: 'Ingresa tu número de celular o correo' }, { status: 400 });
|
|
}
|
|
|
|
const cleanInput = identifier.trim();
|
|
// Buscar usuario en base de datos
|
|
const user = dataService.authenticate(cleanInput);
|
|
|
|
let phoneToSend = cleanInput.replace(/\D/g, '');
|
|
let userName = name?.trim() || (user ? user.name : 'Cliente');
|
|
|
|
if (user) {
|
|
if (!user.isActive) {
|
|
return NextResponse.json({ success: false, error: 'Esta cuenta se encuentra inactiva.' }, { status: 403 });
|
|
}
|
|
phoneToSend = user.phone.replace(/\D/g, '');
|
|
}
|
|
|
|
if (!phoneToSend || phoneToSend.length < 7) {
|
|
return NextResponse.json(
|
|
{ success: false, error: 'Número de celular inválido. Ingresa un número válido de WhatsApp.' },
|
|
{ status: 400 }
|
|
);
|
|
}
|
|
|
|
// Generar código de 6 dígitos
|
|
const code = otpStore.generateOtp(cleanInput, phoneToSend);
|
|
|
|
// Redactar mensaje de seguridad utilizando plantilla
|
|
const storeSettings = dataService.getSettings();
|
|
const message = dataService.renderMessageTemplate('auth_login_otp', {
|
|
tienda_nombre: storeSettings?.storeName || 'DripZone Sneakers',
|
|
usuario_nombre: userName,
|
|
codigo_otp: code,
|
|
});
|
|
|
|
// Enviar a WhatsApp via Evolution API
|
|
const sent = await sendWhatsAppMessage(phoneToSend, message);
|
|
|
|
|
|
if (!sent) {
|
|
// Si falla Evolution (o es teléfono internacional sin formato), permitir fallback seguro
|
|
console.warn(`[OTP] No se pudo enviar por WhatsApp a ${phoneToSend}. Código generado: ${code}`);
|
|
}
|
|
|
|
// Enmascarar teléfono para la respuesta pública (ej: 316***5877)
|
|
const maskedPhone = phoneToSend.length >= 10
|
|
? `${phoneToSend.slice(0, 3)}***${phoneToSend.slice(-4)}`
|
|
: 'tu número';
|
|
|
|
return NextResponse.json({
|
|
success: true,
|
|
message: `Código de 6 dígitos enviado por WhatsApp a ${maskedPhone}`,
|
|
phone: maskedPhone,
|
|
isRegistered: !!user,
|
|
});
|
|
} catch (error: any) {
|
|
console.error('Error enviando OTP:', error);
|
|
return NextResponse.json({ success: false, error: error.message || 'Error al enviar código' }, { status: 500 });
|
|
}
|
|
}
|