From 6ba2c0fc796993ca356690c4efe03d5af0bcfc4f Mon Sep 17 00:00:00 2001 From: amel Date: Tue, 10 Sep 2024 16:48:25 +0800 Subject: [PATCH] upd: global admin Deskripsi: - variable global untuk task NO Issues --- .../(application)/division/[id]/layout.tsx | 12 ++++++ src/app/api/task/[id]/member/route.ts | 22 ++++------- src/app/api/task/[id]/route.ts | 38 ++++++++----------- src/app/api/task/detail/[id]/route.ts | 37 +++++++----------- src/app/api/task/file/[id]/route.ts | 15 +++----- src/app/api/task/route.ts | 4 ++ src/module/division_new/index.ts | 6 ++- src/module/division_new/lib/val_division.ts | 3 +- src/module/division_new/ui/wrap_division.tsx | 28 ++++++++++++++ 9 files changed, 94 insertions(+), 71 deletions(-) create mode 100644 src/app/(application)/division/[id]/layout.tsx create mode 100644 src/module/division_new/ui/wrap_division.tsx diff --git a/src/app/(application)/division/[id]/layout.tsx b/src/app/(application)/division/[id]/layout.tsx new file mode 100644 index 0000000..f6b429c --- /dev/null +++ b/src/app/(application)/division/[id]/layout.tsx @@ -0,0 +1,12 @@ +import { WrapLayoutDivision } from "@/module/division_new"; +import _ from "lodash" + +export default async function Layout({ children }: { children: React.ReactNode }) { + return ( + <> + + {children} + + + ); +} \ No newline at end of file diff --git a/src/app/api/task/[id]/member/route.ts b/src/app/api/task/[id]/member/route.ts index 5792e65..caf5f77 100644 --- a/src/app/api/task/[id]/member/route.ts +++ b/src/app/api/task/[id]/member/route.ts @@ -1,5 +1,6 @@ import { prisma } from "@/module/_global"; import { funGetUserByCookies } from "@/module/auth"; +import { createLogUser } from "@/module/user"; import _ from "lodash"; import { NextResponse } from "next/server"; @@ -43,14 +44,11 @@ export async function POST(request: Request, context: { params: { id: string } } }) } + // create log user + const log = await createLogUser({ act: 'CREATE', desc: 'User menambahkan anggota tugas divisi', table: 'divisionProject', data: id }) - return NextResponse.json( - { - success: true, - message: "Berhasil menambahkan anggota tugas", - }, - { status: 200 } - ); + + return NextResponse.json( { success: true, message: "Berhasil menambahkan anggota tugas", }, { status: 200 } ); } catch (error) { console.error(error); return NextResponse.json({ success: false, message: "Gagal menambah anggota tugas, coba lagi nanti", reason: (error as Error).message, }, { status: 500 }); @@ -92,14 +90,10 @@ export async function DELETE(request: Request, context: { params: { id: string } } }) + // create log user + const log = await createLogUser({ act: 'DELETE', desc: 'User mengeluarkan anggota dari tugas divisi', table: 'divisionProject', data: id }) - return NextResponse.json( - { - success: true, - message: "Berhasil mengeluarkan anggota", - }, - { status: 200 } - ); + return NextResponse.json( { success: true, message: "Berhasil mengeluarkan anggota", }, { status: 200 } ); } catch (error) { console.error(error); return NextResponse.json({ success: false, message: "Gagal mengeluarkan anggota, coba lagi nanti", reason: (error as Error).message, }, { status: 500 }); diff --git a/src/app/api/task/[id]/route.ts b/src/app/api/task/[id]/route.ts index b489e7f..1b613c4 100644 --- a/src/app/api/task/[id]/route.ts +++ b/src/app/api/task/[id]/route.ts @@ -1,5 +1,6 @@ import { prisma } from "@/module/_global"; import { funGetUserByCookies } from "@/module/auth"; +import { createLogUser } from "@/module/user"; import _ from "lodash"; import moment from "moment"; import "moment/locale/id" @@ -184,16 +185,15 @@ export async function POST(request: Request, context: { params: { id: string } } dateStart: new Date(moment(dateStart).format('YYYY-MM-DD')), dateEnd: new Date(moment(dateEnd).format('YYYY-MM-DD')), }, + select: { + id: true + } }); - return NextResponse.json( - { - success: true, - message: "Detail tugas berhasil ditambahkan", - data, - }, - { status: 200 } - ); + // create log user + const log = await createLogUser({ act: 'CREATE', desc: 'User menambahkan detail tugas divisi', table: 'divisionProjectTask', data: create.id }) + + return NextResponse.json({ success: true, message: "Detail tugas berhasil ditambahkan", data, }, { status: 200 }); } catch (error) { console.error(error); return NextResponse.json({ success: false, message: "Gagal mengedit detail tugas, coba lagi nanti", reason: (error as Error).message, }, { status: 500 }); @@ -238,13 +238,10 @@ export async function DELETE(request: Request, context: { params: { id: string } } }); - return NextResponse.json( - { - success: true, - message: "Tugas berhasil dibatalkan", - }, - { status: 200 } - ); + // create log user + const log = await createLogUser({ act: 'UPDATE', desc: 'User membatalkan tugas divisi', table: 'divisionProject', data: id }) + + return NextResponse.json({ success: true, message: "Tugas berhasil dibatalkan", }, { status: 200 }); } catch (error) { console.error(error); return NextResponse.json({ success: false, message: "Gagal membatalkan tugas, coba lagi nanti", reason: (error as Error).message, }, { status: 500 }); @@ -287,13 +284,10 @@ export async function PUT(request: Request, context: { params: { id: string } }) } }); - return NextResponse.json( - { - success: true, - message: "Tugas berhasil diedit", - }, - { status: 200 } - ); + // create log user + const log = await createLogUser({ act: 'UPDATE', desc: 'User mengupdate data tugas divisi', table: 'divisionProject', data: id }) + + return NextResponse.json( { success: true, message: "Tugas berhasil diedit", }, { status: 200 } ); } catch (error) { console.error(error); return NextResponse.json({ success: false, message: "Gagal mengedit tugas, coba lagi nanti", reason: (error as Error).message, }, { status: 500 }); diff --git a/src/app/api/task/detail/[id]/route.ts b/src/app/api/task/detail/[id]/route.ts index 461c0ae..4989183 100644 --- a/src/app/api/task/detail/[id]/route.ts +++ b/src/app/api/task/detail/[id]/route.ts @@ -1,5 +1,6 @@ import { prisma } from "@/module/_global"; import { funGetUserByCookies } from "@/module/auth"; +import { createLogUser } from "@/module/user"; import _ from "lodash"; import moment from "moment"; import { NextResponse } from "next/server"; @@ -67,14 +68,10 @@ export async function DELETE(request: Request, context: { params: { id: string } } }) - return NextResponse.json( - { - success: true, - message: "Tugas berhasil dihapus", - data, - }, - { status: 200 } - ); + // create log user + const log = await createLogUser({ act: 'DELETE', desc: 'User menghapus detail task divisi', table: 'divisionProjectTask', data: id }) + + return NextResponse.json({ success: true, message: "Tugas berhasil dihapus", data, }, { status: 200 }); } catch (error) { console.error(error); return NextResponse.json({ success: false, message: "Gagal menghapus tugas divisi, coba lagi nanti", reason: (error as Error).message, }, { status: 500 }); @@ -146,14 +143,10 @@ export async function PUT(request: Request, context: { params: { id: string } }) } }) - return NextResponse.json( - { - success: true, - message: "Status detail tugas berhasil diupdate", - data, - }, - { status: 200 } - ); + // create log user + const log = await createLogUser({ act: 'UPDATE', desc: 'User mengupdate status detail task divisi', table: 'divisionProjectTask', data: id }) + + return NextResponse.json({ success: true, message: "Status detail tugas berhasil diupdate", data, }, { status: 200 }); } catch (error) { console.error(error); return NextResponse.json({ success: false, message: "Gagal mengupdate status detail tugas, coba lagi nanti", reason: (error as Error).message, }, { status: 500 }); @@ -230,14 +223,10 @@ export async function POST(request: Request, context: { params: { id: string } } }, }); - return NextResponse.json( - { - success: true, - message: "Detail tugas berhasil diedit", - data, - }, - { status: 200 } - ); + // create log user + const log = await createLogUser({ act: 'UPDATE', desc: 'User mengupdate data detail task divisi', table: 'divisionProjectTask', data: id }) + + return NextResponse.json({ success: true, message: "Detail tugas berhasil diedit", data, }, { status: 200 }); } catch (error) { console.error(error); return NextResponse.json({ success: false, message: "Gagal mengedit detail tugas, coba lagi nanti", reason: (error as Error).message, }, { status: 500 }); diff --git a/src/app/api/task/file/[id]/route.ts b/src/app/api/task/file/[id]/route.ts index e0d8c1f..429e74a 100644 --- a/src/app/api/task/file/[id]/route.ts +++ b/src/app/api/task/file/[id]/route.ts @@ -4,6 +4,7 @@ import _ from "lodash"; import { NextResponse } from "next/server"; import fs from "fs"; import path from "path"; +import { createLogUser } from "@/module/user"; // HAPUS DETAIL FILE, HAPUS FILE DI ASSETS DAN DATABASE (BUKAN PAKE ISACTIVE) export async function DELETE(request: Request, context: { params: { id: string } }) { @@ -55,15 +56,10 @@ export async function DELETE(request: Request, context: { params: { id: string } }, }); + // create log user + const log = await createLogUser({ act: 'DELETE', desc: 'User menghpus file divisi', table: 'divisionProject', data: String(dataRelasi?.idProject) }) - return NextResponse.json( - { - success: true, - message: "File berhasil dihapus", - data, - }, - { status: 200 } - ); + return NextResponse.json({ success: true, message: "File berhasil dihapus", data, }, { status: 200 }); } catch (error) { console.error(error); @@ -155,7 +151,8 @@ export async function POST(request: Request, context: { params: { id: string } } }) } - + // create log user + const log = await createLogUser({ act: 'CREATE', desc: 'User meambahkan file tugas divisi baru', table: 'divisionProject', data: id }) return NextResponse.json({ success: true, message: "Berhasil membuat tugas divisi" }, { status: 200 }); } catch (error) { diff --git a/src/app/api/task/route.ts b/src/app/api/task/route.ts index d49eafd..76d524a 100644 --- a/src/app/api/task/route.ts +++ b/src/app/api/task/route.ts @@ -5,6 +5,7 @@ import { NextResponse } from "next/server"; import path from "path"; import fs from "fs"; import moment from "moment"; +import { createLogUser } from "@/module/user"; // GET ALL DATA TUGAS DIVISI @@ -196,6 +197,9 @@ export async function POST(request: Request) { }) } + // create log user + const log = await createLogUser({ act: 'CREATE', desc: 'User membuat tugas divisi baru', table: 'divisionProject', data: data.id }) + return NextResponse.json({ success: true, message: "Berhasil membuat tugas divisi" }, { status: 200 }); diff --git a/src/module/division_new/index.ts b/src/module/division_new/index.ts index 033e9b5..d9724fc 100644 --- a/src/module/division_new/index.ts +++ b/src/module/division_new/index.ts @@ -15,6 +15,8 @@ import EditDivision from './ui/edit_division'; import CreateReport from './ui/create_report'; import ReportDivisionId from './ui/report_division_id'; import { funGetDivisionById, funGetListDivisionByIdDivision, funGetSearchMemberDivision } from './lib/api_division'; +import { globalIsAdminDivision } from './lib/val_division'; +import WrapLayoutDivision from './ui/wrap_division'; export { CreateUsers }; export { CreateAdminDivision }; @@ -34,4 +36,6 @@ export { CreateReport } export { ReportDivisionId } export { funGetDivisionById } export { funGetListDivisionByIdDivision } -export { funGetSearchMemberDivision } \ No newline at end of file +export { funGetSearchMemberDivision } +export { globalIsAdminDivision } +export { WrapLayoutDivision } \ No newline at end of file diff --git a/src/module/division_new/lib/val_division.ts b/src/module/division_new/lib/val_division.ts index 2d769e0..e756a7e 100644 --- a/src/module/division_new/lib/val_division.ts +++ b/src/module/division_new/lib/val_division.ts @@ -1,4 +1,5 @@ import { hookstate } from "@hookstate/core"; import { IFormMemberDivision } from "./type_division"; -export const globalMemberDivision = hookstate([]); \ No newline at end of file +export const globalMemberDivision = hookstate([]); +export const globalIsAdminDivision = hookstate(false) \ No newline at end of file diff --git a/src/module/division_new/ui/wrap_division.tsx b/src/module/division_new/ui/wrap_division.tsx new file mode 100644 index 0000000..53e5dd2 --- /dev/null +++ b/src/module/division_new/ui/wrap_division.tsx @@ -0,0 +1,28 @@ +'use client' +import { useHookstate } from "@hookstate/core"; +import { useShallowEffect } from "@mantine/hooks"; +import { globalIsAdminDivision } from "../lib/val_division"; +import { funGetDivisionById } from "../lib/api_division"; +import { useParams } from "next/navigation"; +import { funGetUserByCookies } from "@/module/auth"; + +export default function WrapLayoutDivision({ children }: { children: React.ReactNode }) { + const isAdmin = useHookstate(globalIsAdminDivision) + const param = useParams<{ id: string }>() + + const getData = async () => { + const res = await funGetDivisionById(param.id); + const login = await funGetUserByCookies() + const cek = res.data.member.some((i: any) => i.idUser == login.id && i.isAdmin == true) + isAdmin.set(cek) + } + + useShallowEffect(() => { + getData() + }, []) + return ( + <> + {children} + + ); +} \ No newline at end of file