Merge pull request 'Fix eror registrasi 1' (#20) from nico/27-nov-25 into staging

Reviewed-on: http://wibugit.wibudev.com/wibu/desa-darmasaba/pulls/20
This commit is contained in:
2025-11-27 16:47:07 +08:00
2 changed files with 40 additions and 9 deletions

View File

@@ -114,6 +114,7 @@ export default function Validasi() {
method: 'POST', method: 'POST',
headers: { 'Content-Type': 'application/json' }, headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ nomor: cleanNomor, otp, kodeId }), body: JSON.stringify({ nomor: cleanNomor, otp, kodeId }),
credentials: 'include'
}); });
const verifyData = await verifyRes.json(); const verifyData = await verifyRes.json();

View File

@@ -3,6 +3,21 @@ import prisma from "@/lib/prisma";
import { NextResponse } from "next/server"; import { NextResponse } from "next/server";
import { sessionCreate } from "../_lib/session_create"; import { sessionCreate } from "../_lib/session_create";
// ✅ Gunakan STRING untuk roleId
const DEFAULT_MENUS_BY_ROLE: Record<string, string[]> = {
"0": [
"Landing Page", "PPID", "Desa", "Kesehatan", "Keamanan",
"Ekonomi", "Inovasi", "Lingkungan", "Pendidikan", "User & Role"
],
"1": [
"Landing Page", "PPID", "Desa", "Keamanan",
"Ekonomi", "Inovasi", "Lingkungan", "User & Role"
],
"2": ["Landing Page", "Desa", "Ekonomi", "Inovasi", "Lingkungan"],
"3": ["Kesehatan"],
"4": ["Pendidikan"],
};
export async function POST(req: Request) { export async function POST(req: Request) {
try { try {
const { nomor, username, kodeId } = await req.json(); const { nomor, username, kodeId } = await req.json();
@@ -30,27 +45,43 @@ export async function POST(req: Request) {
); );
} }
const defaultRole = await prisma.role.findFirst({ // 🔥 Tentukan roleId sebagai STRING
where: { name: "ADMIN DESA" }, const targetRoleId = "1"; // ✅ string, bukan number
select: { id: true },
// Validasi role (gunakan string)
const roleExists = await prisma.role.findUnique({
where: { id: targetRoleId }, // ✅ id bertipe string
select: { id: true }
}); });
if (!defaultRole) { if (!roleExists) {
return NextResponse.json( return NextResponse.json(
{ success: false, message: "Role default tidak ditemukan" }, { success: false, message: "Role tidak valid" },
{ status: 500 } { status: 400 }
); );
} }
// Buat user dengan roleId string
const newUser = await prisma.user.create({ const newUser = await prisma.user.create({
data: { data: {
username, username,
nomor, nomor,
roleId: defaultRole.id, roleId: targetRoleId, // ✅ string
isActive: false, isActive: false,
}, },
}); });
// Berikan akses menu
const menuIds = DEFAULT_MENUS_BY_ROLE[targetRoleId] || [];
if (menuIds.length > 0) {
await prisma.userMenuAccess.createMany({
data: menuIds.map(menuId => ({
userId: newUser.id,
menuId,
})),
});
}
await prisma.kodeOtp.update({ await prisma.kodeOtp.update({
where: { id: kodeId }, where: { id: kodeId },
data: { isActive: false }, data: { isActive: false },
@@ -64,13 +95,12 @@ export async function POST(req: Request) {
id: newUser.id, id: newUser.id,
nomor: newUser.nomor, nomor: newUser.nomor,
username: newUser.username, username: newUser.username,
roleId: newUser.roleId, roleId: newUser.roleId, // string
isActive: false, isActive: false,
}, },
invalidatePrevious: false, invalidatePrevious: false,
}); });
// ✅ REDIRECT DARI SERVER — cookie pasti tersedia
const response = NextResponse.redirect(new URL('/waiting-room', req.url)); const response = NextResponse.redirect(new URL('/waiting-room', req.url));
response.cookies.set(process.env.BASE_SESSION_KEY!, token, { response.cookies.set(process.env.BASE_SESSION_KEY!, token, {
httpOnly: true, httpOnly: true,