From 0cc9f56ec85001cf9a18961022075d4e34185bd8 Mon Sep 17 00:00:00 2001 From: amel Date: Thu, 5 Sep 2024 11:25:49 +0800 Subject: [PATCH] upd: user Deskripsi: - pembtasan role pada anggota - tambah user api - edit user api No Issues --- src/app/api/user/[id]/route.ts | 54 +++++++++++++------ src/module/user/member/ui/edit_member.tsx | 12 +++-- .../user/member/ui/navbar_detail_member.tsx | 7 ++- 3 files changed, 50 insertions(+), 23 deletions(-) diff --git a/src/app/api/user/[id]/route.ts b/src/app/api/user/[id]/route.ts index 1151a0b..a6aaba3 100644 --- a/src/app/api/user/[id]/route.ts +++ b/src/app/api/user/[id]/route.ts @@ -55,10 +55,13 @@ export async function GET(request: Request, context: { params: { id: string } }) const group = users?.Group.name const position = users?.Position.name const idUserRole = users?.UserRole.id + const phone = users?.phone.substr(2) + + const result = { ...userData, group, position, idUserRole, phone }; + + const omitData = _.omit(result, ["Group", "Position", "UserRole"]); - const result = { ...userData, group, position, idUserRole }; - const omitData = _.omit(result, ["Group", "Position", "UserRole"]) return NextResponse.json( { @@ -110,10 +113,13 @@ export async function DELETE(request: Request, context: { params: { id: string } }, }); + // create log user + const log = await createLogUser({ act: 'UPDATE', desc: 'User mengupdate status anggota', table: 'user', data: id }) + return NextResponse.json( { success: true, - message: "Berhasil mendapatkan anggota", + message: "Berhasil mengupdate status anggota", result, }, { status: 200 } @@ -121,7 +127,7 @@ export async function DELETE(request: Request, context: { params: { id: string } } catch (error) { console.error(error); - return NextResponse.json({ success: false, message: "Gagal mendapatkan anggota, coba lagi nanti", reason: (error as Error).message, }, { status: 500 }); + return NextResponse.json({ success: false, message: "Gagal mengupdate status anggota, coba lagi nanti", reason: (error as Error).message, }, { status: 500 }); } } @@ -135,7 +141,7 @@ export async function PUT(request: Request, context: { params: { id: string } }) } const { id } = context.params; console.log(id) - + const body = await request.formData() const file = body.get("file") as File const data = body.get("data") @@ -149,19 +155,35 @@ export async function PUT(request: Request, context: { params: { id: string } }) idPosition, idUserRole } = JSON.parse(data as string) - // const data = await request.json(); - const cek = await prisma.user.count({ + + const cekNIK = await prisma.user.count({ where: { nik: nik, - email: email, - phone: phone, NOT: { id: id } }, }); - if (cek == 0) { + const cekEmail = await prisma.user.count({ + where: { + email: email, + NOT: { + id: id + } + }, + }); + + const cekPhone = await prisma.user.count({ + where: { + phone: "62" + phone, + NOT: { + id: id + } + }, + }); + + if (cekNIK == 0 && cekEmail == 0 && cekPhone == 0) { const updates = await prisma.user.update({ where: { id: id @@ -175,7 +197,7 @@ export async function PUT(request: Request, context: { params: { id: string } }) idGroup: idGroup, idPosition: idPosition, idUserRole: idUserRole, - }, + }, select: { img: true } @@ -187,7 +209,7 @@ export async function PUT(request: Request, context: { params: { id: string } }) const fExt = file.name.split(".").pop() const fileName = id + '.' + fExt; const filePath = path.join(root, fileName); - + // Konversi ArrayBuffer ke Buffer const buffer = Buffer.from(await file.arrayBuffer()); fs.writeFileSync(filePath, buffer); @@ -203,17 +225,17 @@ export async function PUT(request: Request, context: { params: { id: string } }) } // create log user - const log = await createLogUser({ act: 'UPDATE', desc: 'User mengupdate data user', table: 'user', data: user.id }) + const log = await createLogUser({ act: 'UPDATE', desc: 'User mengupdate data anggota', table: 'user', data: user.id }) return Response.json( - { success: true, message: "Sukses Update User" }, + { success: true, message: "Sukses update anggota" }, { status: 200 } ); } else { - return Response.json({ success: false, message: "User sudah ada" }, { status: 400 }); + return Response.json({ success: false, message: "Anggota sudah ada" }, { status: 400 }); } } catch (error) { console.error(error); - return NextResponse.json({ success: false, message: "Gagal mendapatkan anggota, coba lagi nanti", reason: (error as Error).message, }, { status: 500 }); + return NextResponse.json({ success: false, message: "Gagal mengupdate data anggota, coba lagi nanti", reason: (error as Error).message, }, { status: 500 }); } } \ No newline at end of file diff --git a/src/module/user/member/ui/edit_member.tsx b/src/module/user/member/ui/edit_member.tsx index 8cfb333..872c474 100644 --- a/src/module/user/member/ui/edit_member.tsx +++ b/src/module/user/member/ui/edit_member.tsx @@ -1,5 +1,5 @@ 'use client' -import { WARNA } from "@/module/_global"; +import { globalRole, WARNA } from "@/module/_global"; import LayoutModal from "@/module/_global/layout/layout_modal"; import { funGetAllGroup, IDataGroup } from "@/module/group"; import { funGetAllPosition } from "@/module/position/lib/api_position"; @@ -14,6 +14,8 @@ import { funEditMember, funGetOneMember, funGetRoleUser } from "../lib/api_membe import _ from "lodash"; import { Dropzone } from "@mantine/dropzone"; import { FaCamera } from "react-icons/fa6"; +import { useHookstate } from "@hookstate/core"; +import { valueRoleUser } from "../../lib/val_user"; export default function EditMember({ id }: { id: string }) { @@ -26,6 +28,7 @@ export default function EditMember({ id }: { id: string }) { const openRef = useRef<() => void>(null) const [img, setIMG] = useState() const [loading, setLoading] = useState(true) + const roleLogin = useHookstate(globalRole) const [touched, setTouched] = useState({ nik: false, name: false, @@ -91,8 +94,7 @@ export default function EditMember({ id }: { id: string }) { async function getAllUserRole() { try { - const res = await funGetRoleUser(); - setListUserRole(res.data) + setListUserRole(valueRoleUser.filter((v) => v.login == roleLogin.get())[0]?.data); } catch (error) { console.error(error) } @@ -191,7 +193,7 @@ export default function EditMember({ id }: { id: string }) { : <> - (''); const [active, setActive] = useState(false) const [loading, setLoading] = useState(true) + const [isEdit, setEdit] = useState(false) const roleLogin = useHookstate(globalRole) useShallowEffect(() => { @@ -36,6 +38,7 @@ export default function NavbarDetailMember({ id }: IMember) { setDataOne(respose.data) setActive(respose.data?.isActive) setSelectId(respose.data?.id) + setEdit(valueRoleUser.filter((v) => v.login == roleLogin.get())[0]?.data.some((i: any) => i.id == respose.data.idUserRole)) } else { toast.error(respose.message) } @@ -57,7 +60,7 @@ export default function NavbarDetailMember({ id }: IMember) { { - (roleLogin.get() != "user") && + (roleLogin.get() != "user") && isEdit && setOpen(true)} variant="light" bg={WARNA.bgIcon} size="lg" radius="lg" aria-label="Info"> @@ -78,7 +81,7 @@ export default function NavbarDetailMember({ id }: IMember) { : <> - {dataOne?.name} + {dataOne?.name} {dataOne?.group} - {dataOne?.position} }