58 lines
2.0 KiB
TypeScript
58 lines
2.0 KiB
TypeScript
import prisma from "@/lib/prisma";
|
|
import { NextResponse } from "next/server";
|
|
import { randomOTP } from "../_lib/randomOTP";
|
|
|
|
export async function POST(req: Request) {
|
|
try {
|
|
const { username, nomor } = await req.json();
|
|
|
|
if (!username || !nomor) {
|
|
return NextResponse.json({ success: false, message: 'Data tidak lengkap' }, { status: 400 });
|
|
}
|
|
|
|
// Cek duplikat
|
|
if (await prisma.user.findUnique({ where: { nomor } })) {
|
|
return NextResponse.json({ success: false, message: 'Nomor sudah terdaftar' }, { status: 409 });
|
|
}
|
|
if (await prisma.user.findFirst({ where: { username } })) {
|
|
return NextResponse.json({ success: false, message: 'Username sudah digunakan' }, { status: 409 });
|
|
}
|
|
|
|
// Generate OTP
|
|
const codeOtp = randomOTP();
|
|
const otpNumber = Number(codeOtp);
|
|
console.log(`🔑 DEBUG SEND-OTP-REGISTER [${nomor}]: ${codeOtp}`);
|
|
|
|
// Kirim WA
|
|
const waUrl = `https://wa.wibudev.com/code?nom=${encodeURIComponent(nomor)}&text=Website Desa Darmasaba - Kode verifikasi Anda: ${codeOtp}`;
|
|
|
|
try {
|
|
const res = await fetch(waUrl);
|
|
if (!res.ok) {
|
|
console.warn(`⚠️ WA Service HTTP Error (SendOTPRegister): ${res.status} ${res.statusText}. Continuing since OTP is logged.`);
|
|
} else {
|
|
const sendWa = await res.json();
|
|
console.log("📱 WA Response (SendOTPRegister):", sendWa);
|
|
}
|
|
} catch (waError: any) {
|
|
console.warn("⚠️ WA Connection Exception (SendOTPRegister). Continuing since OTP is logged.", waError.message);
|
|
}
|
|
|
|
// Simpan OTP
|
|
const otpRecord = await prisma.kodeOtp.create({
|
|
data: { nomor, otp: otpNumber, isActive: true }
|
|
});
|
|
|
|
return NextResponse.json({
|
|
success: true,
|
|
message: 'Kode verifikasi dikirim',
|
|
kodeId: otpRecord.id,
|
|
nomor,
|
|
});
|
|
} catch (error) {
|
|
console.error('Send OTP for Register Error:', error);
|
|
return NextResponse.json({ success: false, message: 'Gagal mengirim OTP' }, { status: 500 });
|
|
} finally {
|
|
await prisma.$disconnect();
|
|
}
|
|
} |