Next mau fix eror saat user sudah terdaftar tetapi di redirect ke login, seharusnya redirect sesuai roleIdnya
62 lines
1.7 KiB
TypeScript
62 lines
1.7 KiB
TypeScript
// /api/user/delUser.ts
|
|
import prisma from '@/lib/prisma';
|
|
import { Context } from 'elysia';
|
|
|
|
export default async function userDeleteAccount(context: Context) {
|
|
const { id } = context.params as { id: string };
|
|
|
|
try {
|
|
// 1. Cek user dulu
|
|
const existingUser = await prisma.user.findUnique({
|
|
where: { id },
|
|
});
|
|
|
|
if (!existingUser) {
|
|
return {
|
|
success: false,
|
|
message: 'User tidak ditemukan',
|
|
};
|
|
}
|
|
|
|
// ✅ 2. Hapus SEMUA relasi dalam TRANSACTION
|
|
const result = await prisma.$transaction(async (tx) => {
|
|
// Hapus UserSession
|
|
const deletedSessions = await tx.userSession.deleteMany({
|
|
where: { userId: id },
|
|
});
|
|
|
|
// ✅ Hapus UserMenuAccess
|
|
const deletedMenuAccess = await tx.userMenuAccess.deleteMany({
|
|
where: { userId: id },
|
|
});
|
|
|
|
// ✅ Tambahkan relasi lain jika ada (contoh):
|
|
// await tx.userLog.deleteMany({ where: { userId: id } });
|
|
// await tx.userNotification.deleteMany({ where: { userId: id } });
|
|
// await tx.userToken.deleteMany({ where: { userId: id } });
|
|
|
|
// Hapus user
|
|
const deletedUser = await tx.user.delete({
|
|
where: { id },
|
|
});
|
|
|
|
return {
|
|
user: deletedUser,
|
|
sessionsDeleted: deletedSessions.count,
|
|
menuAccessDeleted: deletedMenuAccess.count,
|
|
};
|
|
});
|
|
|
|
return {
|
|
success: true,
|
|
message: `User berhasil dihapus permanen (${result.sessionsDeleted} session, ${result.menuAccessDeleted} menu access)`,
|
|
data: result,
|
|
};
|
|
} catch (error) {
|
|
console.error('Error delete user:', error);
|
|
return {
|
|
success: false,
|
|
message: 'Terjadi kesalahan saat menghapus user',
|
|
};
|
|
}
|
|
} |