Nico 20 Nov 25

Dibagian layout admin sudah disesuaikan dengan rolenya : supadmin, admin desa, admin kesehatan, admin pendidikan
Fix API User & Role Admin
This commit is contained in:
2025-11-20 16:42:36 +08:00
parent 78b8aa74cd
commit 0dff8f3254
19 changed files with 835 additions and 209 deletions

View File

@@ -14,6 +14,16 @@ const User = new Elysia({ prefix: "/api/user" })
id: t.String(),
}),
}) // pakai PUT untuk soft delete
.put("/updt", userUpdate);
.put(
"/updt",
userUpdate,
{
body: t.Object({
id: t.String(),
isActive: t.Optional(t.Boolean()),
roleId: t.Optional(t.String()),
})
}
);
export default User;

View File

@@ -3,7 +3,6 @@ import { Context } from "elysia";
type FormCreate = {
name: string;
permissions: string[];
}
export default async function roleCreate(context: Context) {
@@ -13,7 +12,6 @@ export default async function roleCreate(context: Context) {
const result = await prisma.role.create({
data: {
name: body.name,
permissions: body.permissions,
},
});
return {

View File

@@ -13,7 +13,6 @@ const Role = new Elysia({
.post("/create", roleCreate, {
body: t.Object({
name: t.String(),
permissions: t.Array(t.String()),
}),
})
@@ -27,7 +26,6 @@ const Role = new Elysia({
.put("/:id", roleUpdate, {
body: t.Object({
name: t.String(),
permissions: t.Array(t.String()),
}),
})
.delete("/del/:id", roleDelete);

View File

@@ -3,7 +3,6 @@ import { Context } from "elysia";
type FormUpdate = {
name: string;
permissions: string[];
}
export default async function roleUpdate(context: Context) {
@@ -15,7 +14,6 @@ export default async function roleUpdate(context: Context) {
where: { id },
data: {
name: body.name,
permissions: body.permissions,
},
});
return {

View File

@@ -4,7 +4,11 @@ import { Context } from "elysia";
export default async function userUpdate(context: Context) {
try {
const { id, isActive } = await context.body as { id: string, isActive: boolean };
const { id, isActive, roleId } = await context.body as {
id: string,
isActive?: boolean,
roleId?: string
};
if (!id) {
return {
@@ -13,28 +17,53 @@ export default async function userUpdate(context: Context) {
};
}
// Optional: cek apakah roleId valid
if (roleId) {
const cekRole = await prisma.role.findUnique({
where: { id: roleId }
});
if (!cekRole) {
return {
success: false,
message: "Role tidak ditemukan",
};
}
}
const updatedUser = await prisma.user.update({
where: { id },
data: { isActive },
data: {
...(isActive !== undefined && { isActive }),
...(roleId && { roleId }),
},
select: {
id: true,
username: true,
nomor: true,
isActive: true,
roleId: true,
updatedAt: true,
role: {
select: {
id: true,
name: true,
}
}
}
});
return {
success: true,
message: `User berhasil ${isActive ? "diaktifkan" : "dinonaktifkan"}`,
message: `User berhasil diupdate`,
data: updatedUser,
};
} catch (e: any) {
console.error("Error update user:", e);
return {
success: false,
message: "Gagal mengupdate status user",
message: "Gagal mengupdate user",
};
}
}

View File

@@ -108,11 +108,18 @@ export async function POST(req: Request) {
data: { isActive: false },
});
const userData = {
id: user.id,
name: user.username, // atau user.nama jika ada kolom nama
roleId: user.roleId,
};
// Set cookie & respons
const response = NextResponse.json(
{
success: true,
message: "Berhasil login",
user: userData,
roleId: user.roleId,
},
{ status: 200 }