From a628e1c0539c8bd258a93768dd5ed6aec6a4d114 Mon Sep 17 00:00:00 2001 From: amel Date: Tue, 13 Aug 2024 10:25:27 +0800 Subject: [PATCH 1/6] refactor : divisi Deskripsi: - folder management divisi No Issues --- src/app/(application)/division/page.tsx | 4 +-- .../division/report/[id]/page.tsx | 4 +-- src/module/division_new/index.ts | 34 +++++++++---------- .../{components => ui}/carousel_division.tsx | 0 .../create_admin_division.tsx | 0 .../create_anggota_division.tsx | 0 .../{components => ui}/create_division.tsx | 0 .../{components => ui}/create_report.tsx | 0 .../{components => ui}/create_users.tsx | 0 .../{components => ui}/discussion_report.tsx | 0 .../drawer_detail_division.tsx | 0 .../{components => ui}/drawer_division.tsx | 0 .../{components => ui}/echart_bar_report.tsx | 0 .../{components => ui}/echart_pai_report.tsx | 0 .../{components => ui}/edit_division.tsx | 0 .../{components => ui}/event_report.tsx | 0 .../feature_detail_division.tsx | 0 .../information_division.tsx | 0 .../{components => ui}/list_discussion.tsx | 0 .../{components => ui}/list_division.tsx | 0 .../{components => ui}/list_document.tsx | 0 .../{components => ui}/list_task.tsx | 0 .../navbar_admin_division.tsx | 0 .../navbar_create_users.tsx | 0 .../navbar_detail_division.tsx | 0 .../{components => ui}/report_division_id.tsx | 0 .../division_new/view/view_create_report.tsx | 9 ----- .../view/view_report_division.tsx | 9 ----- 28 files changed, 21 insertions(+), 39 deletions(-) rename src/module/division_new/{components => ui}/carousel_division.tsx (100%) rename src/module/division_new/{components => ui}/create_admin_division.tsx (100%) rename src/module/division_new/{components => ui}/create_anggota_division.tsx (100%) rename src/module/division_new/{components => ui}/create_division.tsx (100%) rename src/module/division_new/{components => ui}/create_report.tsx (100%) rename src/module/division_new/{components => ui}/create_users.tsx (100%) rename src/module/division_new/{components => ui}/discussion_report.tsx (100%) rename src/module/division_new/{components => ui}/drawer_detail_division.tsx (100%) rename src/module/division_new/{components => ui}/drawer_division.tsx (100%) rename src/module/division_new/{components => ui}/echart_bar_report.tsx (100%) rename src/module/division_new/{components => ui}/echart_pai_report.tsx (100%) rename src/module/division_new/{components => ui}/edit_division.tsx (100%) rename src/module/division_new/{components => ui}/event_report.tsx (100%) rename src/module/division_new/{components => ui}/feature_detail_division.tsx (100%) rename src/module/division_new/{components => ui}/information_division.tsx (100%) rename src/module/division_new/{components => ui}/list_discussion.tsx (100%) rename src/module/division_new/{components => ui}/list_division.tsx (100%) rename src/module/division_new/{components => ui}/list_document.tsx (100%) rename src/module/division_new/{components => ui}/list_task.tsx (100%) rename src/module/division_new/{components => ui}/navbar_admin_division.tsx (100%) rename src/module/division_new/{components => ui}/navbar_create_users.tsx (100%) rename src/module/division_new/{components => ui}/navbar_detail_division.tsx (100%) rename src/module/division_new/{components => ui}/report_division_id.tsx (100%) delete mode 100644 src/module/division_new/view/view_create_report.tsx delete mode 100644 src/module/division_new/view/view_report_division.tsx diff --git a/src/app/(application)/division/page.tsx b/src/app/(application)/division/page.tsx index acbd0f7..2e17ed4 100644 --- a/src/app/(application)/division/page.tsx +++ b/src/app/(application)/division/page.tsx @@ -1,12 +1,12 @@ import { ViewFilter } from '@/module/_global'; -import { ListDivision, ViewCreateReport } from '@/module/division_new'; +import { CreateReport, ListDivision } from '@/module/division_new'; import React from 'react'; function Page({ searchParams }: { searchParams: { page: string } }) { if (searchParams.page == "filter") return if (searchParams.page == "report") - return + return return ( ); diff --git a/src/app/(application)/division/report/[id]/page.tsx b/src/app/(application)/division/report/[id]/page.tsx index 0c48522..00ed1f0 100644 --- a/src/app/(application)/division/report/[id]/page.tsx +++ b/src/app/(application)/division/report/[id]/page.tsx @@ -1,8 +1,8 @@ -import { ViewReportDivision } from "@/module/division_new" +import { ReportDivisionId } from "@/module/division_new" function Page() { return ( - + ) } diff --git a/src/module/division_new/index.ts b/src/module/division_new/index.ts index aae0b28..8c60be3 100644 --- a/src/module/division_new/index.ts +++ b/src/module/division_new/index.ts @@ -19,25 +19,24 @@ import ViewDetailDivisionTask from "./_division_fitur/task/view/view_detail_divi import ViewDivisionTask from "./_division_fitur/task/view/view_division_task"; import ViewUpdateProgressDivisionTask from "./_division_fitur/task/view/view_update_progress_division_task"; import { apiDivision } from "./api/api_division"; -import CreateAdminDivision from "./components/create_admin_division"; -import CreateUsers from "./components/create_users"; -import ViewCreateReport from "./view/view_create_report"; -import ViewReportDivision from "./view/view_report_division"; -import ListDivision from './components/list_division'; -import CreateDivision from './components/create_division'; -import NavbarDetailDivision from './components/navbar_detail_division'; -import CarouselDivision from './components/carousel_division'; -import FeatureDetailDivision from './components/feature_detail_division'; -import ListTaskOnDetailDivision from './components/list_task'; -import ListDocumentOnDetailDivision from './components/list_document'; -import ListDiscussionOnDetailDivision from './components/list_discussion'; -import InformationDivision from './components/information_division'; -import CreateAnggotaDivision from './components/create_anggota_division'; -import EditDivision from './components/edit_division'; +import CreateAdminDivision from "./ui/create_admin_division"; +import CreateUsers from "./ui/create_users"; +import ListDivision from './ui/list_division'; +import CreateDivision from './ui/create_division'; +import NavbarDetailDivision from './ui/navbar_detail_division'; +import CarouselDivision from './ui/carousel_division'; +import FeatureDetailDivision from './ui/feature_detail_division'; +import ListTaskOnDetailDivision from './ui/list_task'; +import ListDocumentOnDetailDivision from './ui/list_document'; +import ListDiscussionOnDetailDivision from './ui/list_discussion'; +import InformationDivision from './ui/information_division'; +import CreateAnggotaDivision from './ui/create_anggota_division'; +import EditDivision from './ui/edit_division'; +import CreateReport from './ui/create_report'; +import ReportDivisionId from './ui/report_division_id'; export { CreateUsers }; export { CreateAdminDivision }; -export { ViewCreateReport }; export { ViewDivisionTask }; export { ViewDetailDivisionTask }; export { ViewUpdateProgressDivisionTask }; @@ -56,7 +55,6 @@ export { ViewCreateDiscussion }; export { ViewDetailDiscussion }; export { ViewEditDiscussion }; export { ViewDocumentDivision }; -export { ViewReportDivision }; export { apiDivision } export { apiDiscussion } export type { IFormDivision, IFormMemberDivision, IFormFixDivision, IDataDivison, IDataMemberDivision } @@ -71,3 +69,5 @@ export { ListDiscussionOnDetailDivision } export { InformationDivision } export { CreateAnggotaDivision } export { EditDivision } +export { CreateReport } +export { ReportDivisionId } diff --git a/src/module/division_new/components/carousel_division.tsx b/src/module/division_new/ui/carousel_division.tsx similarity index 100% rename from src/module/division_new/components/carousel_division.tsx rename to src/module/division_new/ui/carousel_division.tsx diff --git a/src/module/division_new/components/create_admin_division.tsx b/src/module/division_new/ui/create_admin_division.tsx similarity index 100% rename from src/module/division_new/components/create_admin_division.tsx rename to src/module/division_new/ui/create_admin_division.tsx diff --git a/src/module/division_new/components/create_anggota_division.tsx b/src/module/division_new/ui/create_anggota_division.tsx similarity index 100% rename from src/module/division_new/components/create_anggota_division.tsx rename to src/module/division_new/ui/create_anggota_division.tsx diff --git a/src/module/division_new/components/create_division.tsx b/src/module/division_new/ui/create_division.tsx similarity index 100% rename from src/module/division_new/components/create_division.tsx rename to src/module/division_new/ui/create_division.tsx diff --git a/src/module/division_new/components/create_report.tsx b/src/module/division_new/ui/create_report.tsx similarity index 100% rename from src/module/division_new/components/create_report.tsx rename to src/module/division_new/ui/create_report.tsx diff --git a/src/module/division_new/components/create_users.tsx b/src/module/division_new/ui/create_users.tsx similarity index 100% rename from src/module/division_new/components/create_users.tsx rename to src/module/division_new/ui/create_users.tsx diff --git a/src/module/division_new/components/discussion_report.tsx b/src/module/division_new/ui/discussion_report.tsx similarity index 100% rename from src/module/division_new/components/discussion_report.tsx rename to src/module/division_new/ui/discussion_report.tsx diff --git a/src/module/division_new/components/drawer_detail_division.tsx b/src/module/division_new/ui/drawer_detail_division.tsx similarity index 100% rename from src/module/division_new/components/drawer_detail_division.tsx rename to src/module/division_new/ui/drawer_detail_division.tsx diff --git a/src/module/division_new/components/drawer_division.tsx b/src/module/division_new/ui/drawer_division.tsx similarity index 100% rename from src/module/division_new/components/drawer_division.tsx rename to src/module/division_new/ui/drawer_division.tsx diff --git a/src/module/division_new/components/echart_bar_report.tsx b/src/module/division_new/ui/echart_bar_report.tsx similarity index 100% rename from src/module/division_new/components/echart_bar_report.tsx rename to src/module/division_new/ui/echart_bar_report.tsx diff --git a/src/module/division_new/components/echart_pai_report.tsx b/src/module/division_new/ui/echart_pai_report.tsx similarity index 100% rename from src/module/division_new/components/echart_pai_report.tsx rename to src/module/division_new/ui/echart_pai_report.tsx diff --git a/src/module/division_new/components/edit_division.tsx b/src/module/division_new/ui/edit_division.tsx similarity index 100% rename from src/module/division_new/components/edit_division.tsx rename to src/module/division_new/ui/edit_division.tsx diff --git a/src/module/division_new/components/event_report.tsx b/src/module/division_new/ui/event_report.tsx similarity index 100% rename from src/module/division_new/components/event_report.tsx rename to src/module/division_new/ui/event_report.tsx diff --git a/src/module/division_new/components/feature_detail_division.tsx b/src/module/division_new/ui/feature_detail_division.tsx similarity index 100% rename from src/module/division_new/components/feature_detail_division.tsx rename to src/module/division_new/ui/feature_detail_division.tsx diff --git a/src/module/division_new/components/information_division.tsx b/src/module/division_new/ui/information_division.tsx similarity index 100% rename from src/module/division_new/components/information_division.tsx rename to src/module/division_new/ui/information_division.tsx diff --git a/src/module/division_new/components/list_discussion.tsx b/src/module/division_new/ui/list_discussion.tsx similarity index 100% rename from src/module/division_new/components/list_discussion.tsx rename to src/module/division_new/ui/list_discussion.tsx diff --git a/src/module/division_new/components/list_division.tsx b/src/module/division_new/ui/list_division.tsx similarity index 100% rename from src/module/division_new/components/list_division.tsx rename to src/module/division_new/ui/list_division.tsx diff --git a/src/module/division_new/components/list_document.tsx b/src/module/division_new/ui/list_document.tsx similarity index 100% rename from src/module/division_new/components/list_document.tsx rename to src/module/division_new/ui/list_document.tsx diff --git a/src/module/division_new/components/list_task.tsx b/src/module/division_new/ui/list_task.tsx similarity index 100% rename from src/module/division_new/components/list_task.tsx rename to src/module/division_new/ui/list_task.tsx diff --git a/src/module/division_new/components/navbar_admin_division.tsx b/src/module/division_new/ui/navbar_admin_division.tsx similarity index 100% rename from src/module/division_new/components/navbar_admin_division.tsx rename to src/module/division_new/ui/navbar_admin_division.tsx diff --git a/src/module/division_new/components/navbar_create_users.tsx b/src/module/division_new/ui/navbar_create_users.tsx similarity index 100% rename from src/module/division_new/components/navbar_create_users.tsx rename to src/module/division_new/ui/navbar_create_users.tsx diff --git a/src/module/division_new/components/navbar_detail_division.tsx b/src/module/division_new/ui/navbar_detail_division.tsx similarity index 100% rename from src/module/division_new/components/navbar_detail_division.tsx rename to src/module/division_new/ui/navbar_detail_division.tsx diff --git a/src/module/division_new/components/report_division_id.tsx b/src/module/division_new/ui/report_division_id.tsx similarity index 100% rename from src/module/division_new/components/report_division_id.tsx rename to src/module/division_new/ui/report_division_id.tsx diff --git a/src/module/division_new/view/view_create_report.tsx b/src/module/division_new/view/view_create_report.tsx deleted file mode 100644 index 9ae381b..0000000 --- a/src/module/division_new/view/view_create_report.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import React from 'react'; -import CreateReport from '../components/create_report'; - -export default function ViewCreateReport() { - return ( - - ); -} - diff --git a/src/module/division_new/view/view_report_division.tsx b/src/module/division_new/view/view_report_division.tsx deleted file mode 100644 index 63f98a1..0000000 --- a/src/module/division_new/view/view_report_division.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import React from 'react'; -import ReportDivisionId from '../components/report_division_id'; - -export default function ViewReportDivision() { - return ( - - ); -} - From 15b20f825cbe1e204f46b200eef8e678faac8540 Mon Sep 17 00:00:00 2001 From: amel Date: Tue, 13 Aug 2024 10:32:53 +0800 Subject: [PATCH 2/6] upd: filter divisi Deskripsi: - update filter divisi No Issues --- src/module/division_new/ui/list_division.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/module/division_new/ui/list_division.tsx b/src/module/division_new/ui/list_division.tsx index e53e22b..48492b5 100644 --- a/src/module/division_new/ui/list_division.tsx +++ b/src/module/division_new/ui/list_division.tsx @@ -1,7 +1,7 @@ 'use client' import { API_ADDRESS, LayoutDrawer, LayoutNavbarNew, WARNA } from '@/module/_global'; import { ActionIcon, Avatar, Box, Card, Center, Divider, Flex, Grid, Group, Text, TextInput, Title } from '@mantine/core'; -import { useRouter } from 'next/navigation'; +import { useRouter, useSearchParams } from 'next/navigation'; import React, { useState } from 'react'; import { HiMenu } from 'react-icons/hi'; import { HiMagnifyingGlass, HiMiniPresentationChartBar, HiMiniUserGroup, HiOutlineListBullet, HiSquares2X2 } from 'react-icons/hi2'; @@ -19,6 +19,8 @@ export default function ListDivision() { const [data, setData] = useState([]) const [jumlah, setJumlah] = useState(0) const [searchQuery, setSearchQuery] = useState('') + const searchParams = useSearchParams() + const group = searchParams.get('group') const handleList = () => { setIsList(!isList) @@ -27,7 +29,7 @@ export default function ListDivision() { const fetchData = async (search: string) => { try { setData([]); - const response = await funGetAllDivision('?search=' + search) + const response = await funGetAllDivision('?search=' + search + '&group=' + group) if (response.success) { setData(response.data) From c3a92f7898b04803c27b2d7e1246c2b7ee47f38a Mon Sep 17 00:00:00 2001 From: amel Date: Tue, 13 Aug 2024 10:42:59 +0800 Subject: [PATCH 3/6] refactor: api divisi Deskripsi: - folder manager api divisi No Issues --- src/app/api/division/get/route.ts | 7 -- src/app/api/division/post/route.tsx | 6 -- src/module/division_new/api/api_division.ts | 14 --- src/module/division_new/api/api_index.ts | 39 --------- .../division_new/api/get/getAllDivision.ts | 30 ------- .../api/get/getOneDetailDivision.ts | 87 ------------------- .../division_new/api/get/getOneDivision.ts | 41 --------- .../division_new/api/post/createDivision.ts | 43 --------- .../division_new/api/post/deleteDivision.ts | 27 ------ .../division_new/api/post/updateDivision.ts | 24 ----- src/module/division_new/index.ts | 2 - .../division_new/ui/navbar_admin_division.tsx | 31 +------ .../position/ui/drawer_list_position.tsx | 27 +----- 13 files changed, 3 insertions(+), 375 deletions(-) delete mode 100644 src/app/api/division/get/route.ts delete mode 100644 src/app/api/division/post/route.tsx delete mode 100644 src/module/division_new/api/api_division.ts delete mode 100644 src/module/division_new/api/api_index.ts delete mode 100644 src/module/division_new/api/get/getAllDivision.ts delete mode 100644 src/module/division_new/api/get/getOneDetailDivision.ts delete mode 100644 src/module/division_new/api/get/getOneDivision.ts delete mode 100644 src/module/division_new/api/post/createDivision.ts delete mode 100644 src/module/division_new/api/post/deleteDivision.ts delete mode 100644 src/module/division_new/api/post/updateDivision.ts diff --git a/src/app/api/division/get/route.ts b/src/app/api/division/get/route.ts deleted file mode 100644 index 59135f9..0000000 --- a/src/app/api/division/get/route.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { apiDivision } from "@/module/division_new"; -import { NextRequest } from "next/server"; - -export const dynamic = 'force-dynamic' -export async function GET(req: NextRequest) { - return apiDivision(req, "GET") -} \ No newline at end of file diff --git a/src/app/api/division/post/route.tsx b/src/app/api/division/post/route.tsx deleted file mode 100644 index 9db8415..0000000 --- a/src/app/api/division/post/route.tsx +++ /dev/null @@ -1,6 +0,0 @@ -import { apiDivision } from "@/module/division_new"; -import { NextRequest } from "next/server"; - -export async function POST(req: NextRequest) { - return apiDivision(req, "POST") -} \ No newline at end of file diff --git a/src/module/division_new/api/api_division.ts b/src/module/division_new/api/api_division.ts deleted file mode 100644 index 0c2af00..0000000 --- a/src/module/division_new/api/api_division.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { NextRequest } from "next/server"; -import { API_INDEX_DIVISION } from "./api_index"; -type Method = "GET" | "POST"; - -export async function apiDivision(req: NextRequest, method: Method) { - const { searchParams } = new URL(req.url); - const path = searchParams.get("path"); - const act = API_INDEX_DIVISION.find((v) => v.path === path && v.method === method); - if (!path) - return Response.json({ message: "page not found" }, { status: 404 }); - if (act) return act.bin(req); - - return Response.json({ message: "404" }); -} diff --git a/src/module/division_new/api/api_index.ts b/src/module/division_new/api/api_index.ts deleted file mode 100644 index 6e5225d..0000000 --- a/src/module/division_new/api/api_index.ts +++ /dev/null @@ -1,39 +0,0 @@ -import getAllDivision from "./get/getAllDivision"; -import getOneDivision from "./get/getOneDivision"; -import getOneDetailDivision from "./get/getOneDetailDivision"; -import createDivision from "./post/createDivision"; -import deleteDivision from "./post/deleteDivision"; -import updateDivision from "./post/updateDivision"; - -export const API_INDEX_DIVISION = [ - { - path: "create-division", - method: "POST", - bin: createDivision, - }, - { - path: "update-division", - method: "POST", - bin: updateDivision, - }, - { - path: "delete-division", - method: "POST", - bin: deleteDivision, - }, - { - path: "get-all-division", - method: "GET", - bin: getAllDivision, - }, - { - path: "get-one-division", - method: "GET", - bin: getOneDivision, - }, - { - path: "get-one-detail-division", - method: "GET", - bin: getOneDetailDivision, - }, -]; diff --git a/src/module/division_new/api/get/getAllDivision.ts b/src/module/division_new/api/get/getAllDivision.ts deleted file mode 100644 index 53c13e4..0000000 --- a/src/module/division_new/api/get/getAllDivision.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { prisma } from "@/module/_global"; -import { funGetUserByCookies } from "@/module/auth"; -import { NextRequest } from "next/server"; - -export default async function getAllDivision(req: NextRequest) { - try { - let grup - const user = await funGetUserByCookies() - const searchParams = req.nextUrl.searchParams - let groupID = searchParams.get('groupID'); - if (groupID == null || groupID == undefined) { - grup = user.idGroup - } else { - grup = groupID - } - - const division = await prisma.division.findMany({ - where: { - isActive: true, - idGroup: grup - } - }) - - - return Response.json(division); - } catch (error) { - console.error(error); - return Response.json({ success: false, message: "Internal Server Error" }, { status: 500 }); - } -} \ No newline at end of file diff --git a/src/module/division_new/api/get/getOneDetailDivision.ts b/src/module/division_new/api/get/getOneDetailDivision.ts deleted file mode 100644 index 806a901..0000000 --- a/src/module/division_new/api/get/getOneDetailDivision.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { prisma } from '@/module/_global'; -import { NextRequest } from "next/server"; - -export const dynamic = 'force-dynamic' -export default async function getOneDetailDivision(req: NextRequest) { - try { - const searchParams = req.nextUrl.searchParams - const id = searchParams.get('divisionId'); - - const division = await prisma.division.findUnique({ - where: { - id: String(id), - }, - select: { - id: true, - name: true, - }, - }); - - const member = await prisma.divisionMember.findMany({ - where: { - idDivision: String(id), - }, - select: { - idUser: true, - isLeader: true - } - }) - - const tugas = await prisma.divisionProject.count({ - where: { - idDivision: String(id), - status: { - lte: 1 - }, - isActive: true - } - }) - - const dokumen = await prisma.divisionDocumentFolderFile.count({ - where: { - idDivision: String(id), - isActive: true, - category: "FILE" - } - }) - - const diskusi = await prisma.divisionDisscussion.count({ - where: { - idDivision: String(id), - isActive: true, - status: 1 - } - }) - - const kalender = await prisma.divisionCalendar.count({ - where: { - idDivision: String(id), - isActive: true, - dateStart: { - lte: new Date() - } - } - }) - - const allData = { - // division: division, - division: { name: name }, - jumlah: { - tugas: 1, - dokumen: dokumen, - diskusi: diskusi, - kalender: kalender - }, - member: member, - } - - return Response.json(allData); - } catch (error) { - console.error(error); - return Response.json( - { message: "Internal Server Error", success: false }, - { status: 500 } - ); - } - -} \ No newline at end of file diff --git a/src/module/division_new/api/get/getOneDivision.ts b/src/module/division_new/api/get/getOneDivision.ts deleted file mode 100644 index 0dcc7e9..0000000 --- a/src/module/division_new/api/get/getOneDivision.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { prisma } from "@/module/_global"; -import { NextRequest } from "next/server"; - -export default async function getOneDivision(req: NextRequest) { - try { - const searchParams = req.nextUrl.searchParams - const id = searchParams.get('divisionID'); - const division = await prisma.division.findUnique({ - where: { - id: String(id), - }, - select: { - id: true, - name: true, - }, - }); - - const member = await prisma.divisionMember.findMany({ - where: { - idDivision: String(id), - }, - select: { - idUser: true, - isLeader: true - } - }) - - const allData = { - division: division, - member: member - } - return Response.json(allData); - } catch (error) { - console.error(error); - return Response.json( - { message: "Internal Server Error", success: false }, - { status: 500 } - ); - } - -} \ No newline at end of file diff --git a/src/module/division_new/api/post/createDivision.ts b/src/module/division_new/api/post/createDivision.ts deleted file mode 100644 index 10e57f1..0000000 --- a/src/module/division_new/api/post/createDivision.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { prisma } from "@/module/_global"; -import { funGetUserByCookies } from "@/module/auth"; -import _ from "lodash"; -import { revalidatePath } from "next/cache"; - -export default async function createDivision(req: Request) { - try { - const sent = await req.json(); - const user = await funGetUserByCookies(); - - const insertDivision = await prisma.division.create({ - data: { - name: sent.data.name, - idVillage: String(user.idVillage), - idGroup: sent.data.idGroup, - desc: sent.data.desc, - createdBy: String(user.id) - }, - select: { - id: true - } - }) - - const dataMember = sent.member.map((v: any) => ({ - ..._.omit(v, ["isActive", "nik", "name", "phone", "email", "gender", "group", "position"]), - idUser: v.id, - idDivision: insertDivision.id, - isAdmin: sent.admin.some((i: any) => i == v.id) - })) - - const insertMember = await prisma.divisionMember.createMany({ - data: dataMember - }) - - revalidatePath("/division"); - - return Response.json({ success: true, message: "Sukses menambahkan data divisi" }, { status: 201 }); - - } catch (error) { - console.error(error); - return Response.json({ success: false, message: "Internal Server Error" }, { status: 500 }); - } -} \ No newline at end of file diff --git a/src/module/division_new/api/post/deleteDivision.ts b/src/module/division_new/api/post/deleteDivision.ts deleted file mode 100644 index a74b5e9..0000000 --- a/src/module/division_new/api/post/deleteDivision.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { prisma } from "@/module/_global"; - -export default async function deleteDivision(req: Request) { - try { - const data = await req.json(); - const update = await prisma.division.update({ - where: { - id: data.id, - }, - data: { - isActive: false, - }, - }); - - return Response.json( - { success: true, message: "Sukses Delete Division" }, - { status: 200 } - ); - - } catch (error) { - console.error(error); - return Response.json( - { message: "Internal Server Error", success: false }, - { status: 500 } - ); - } -} \ No newline at end of file diff --git a/src/module/division_new/api/post/updateDivision.ts b/src/module/division_new/api/post/updateDivision.ts deleted file mode 100644 index 5603fc9..0000000 --- a/src/module/division_new/api/post/updateDivision.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { prisma } from "@/module/_global"; - -export default async function updateDivision(req: Request) { - try { - const data = await req.json() - - const update = await prisma.division.update({ - where: { - id: data.id - }, - data: { - name: data.name, - desc: data.desc - } - }) - - // belom update member nihhhh - - return Response.json({ success: true, message: "Sukses Update Divisi" }, { status: 200 }); - } catch (error) { - console.error(error); - return Response.json({ message: "Internal Server Error", success: false }, { status: 500 }); - } -} \ No newline at end of file diff --git a/src/module/division_new/index.ts b/src/module/division_new/index.ts index 8c60be3..cb090e6 100644 --- a/src/module/division_new/index.ts +++ b/src/module/division_new/index.ts @@ -18,7 +18,6 @@ import ViewCreateTaskDivision from "./_division_fitur/task/view/view_create_divi import ViewDetailDivisionTask from "./_division_fitur/task/view/view_detail_division_task"; import ViewDivisionTask from "./_division_fitur/task/view/view_division_task"; import ViewUpdateProgressDivisionTask from "./_division_fitur/task/view/view_update_progress_division_task"; -import { apiDivision } from "./api/api_division"; import CreateAdminDivision from "./ui/create_admin_division"; import CreateUsers from "./ui/create_users"; import ListDivision from './ui/list_division'; @@ -55,7 +54,6 @@ export { ViewCreateDiscussion }; export { ViewDetailDiscussion }; export { ViewEditDiscussion }; export { ViewDocumentDivision }; -export { apiDivision } export { apiDiscussion } export type { IFormDivision, IFormMemberDivision, IFormFixDivision, IDataDivison, IDataMemberDivision } export { ListDivision } diff --git a/src/module/division_new/ui/navbar_admin_division.tsx b/src/module/division_new/ui/navbar_admin_division.tsx index dcd506b..864b876 100644 --- a/src/module/division_new/ui/navbar_admin_division.tsx +++ b/src/module/division_new/ui/navbar_admin_division.tsx @@ -35,37 +35,8 @@ export default function NavbarAdminDivision({ data, onSuccess }: { data: any, on } catch (error) { console.log(error); onSuccess(false) - toast.error("Gagal menambahkan grup, coba lagi nanti"); + toast.error("Gagal menambahkan divisi, coba lagi nanti"); } - - - - // try { - // const res = await fetch(API_ADDRESS.apiCreateDivision, { - // method: 'POST', - // headers: { - // 'Content-Type': 'application/json' - // }, - // body: JSON.stringify({ - // data: data, - // member: member.get(), - // admin: value - // }) - // }) - - // const errorData = await res.json(); - - // if (res.status == 201) { - // toast.success('Sukses! data tersimpan') - // onSuccess(true) - // } else { - // toast.error(errorData.message); - // onSuccess(false) - // } - // } catch (error) { - // toast.error('Error') - // onSuccess(false) - // } } return ( diff --git a/src/module/position/ui/drawer_list_position.tsx b/src/module/position/ui/drawer_list_position.tsx index 9859ae8..0ca241a 100644 --- a/src/module/position/ui/drawer_list_position.tsx +++ b/src/module/position/ui/drawer_list_position.tsx @@ -30,7 +30,7 @@ export default function DrawerListPosition({ onCreated }: { onCreated: (val: boo } } catch (error) { console.error(error) - toast.error("Gagal mendapatkan grup, coba lagi nanti"); + toast.error("Gagal mendapatkan jabatan, coba lagi nanti"); } } @@ -41,29 +41,6 @@ export default function DrawerListPosition({ onCreated }: { onCreated: (val: boo async function onSubmit() { try { - // const res = await fetch(API_ADDRESS.apiCreatePosition, { - // method: 'POST', - // headers: { - // 'Content-Type': 'application/json' - // }, - // body: JSON.stringify({ - // name: listData.name, - // idGroup: listData.idGroup - // }) - // }) - - // if (!res.ok) { - // const errorData = await res.json(); - // if (errorData.message === "Position sudah ada") { - // toast.error('Gagal! Position sudah ada'); - // } else { - // toast.error('Error'); - // } - // } else { - // setOpenDrawerGroup(false) - // toast.success('Sukses! data tersimpan') - // } - // onCreated(true) const res = await funCreatePosition({ name: listData.name, idGroup: listData.idGroup @@ -76,7 +53,7 @@ export default function DrawerListPosition({ onCreated }: { onCreated: (val: boo } else { toast.error(res.message) } - + } catch (error) { toast.error('Error') } From 8c25532dbb7c0d0a78b51c8383b6d2e407cf849f Mon Sep 17 00:00:00 2001 From: amel Date: Tue, 13 Aug 2024 10:47:46 +0800 Subject: [PATCH 4/6] fix: api role user Deskripsi: - kondisi where select data - notifikasi message No Issues --- src/app/api/role-user/route.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/app/api/role-user/route.ts b/src/app/api/role-user/route.ts index b79a52f..c38698b 100644 --- a/src/app/api/role-user/route.ts +++ b/src/app/api/role-user/route.ts @@ -9,13 +9,16 @@ export async function GET(request: Request) { return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 401 }); } const res = await prisma.userRole.findMany({ + where: { + isActive: true + }, select: { id: true, name: true, }, }); - return NextResponse.json({ success: true, message: "Berhasil role user", data: res, }, { status: 200 }); + return NextResponse.json({ success: true, message: "Berhasil mendapatkan role user", data: res, }, { status: 200 }); } catch (error) { console.error(error); return NextResponse.json({ success: false, message: "Gagal mendapatkan role user, coba lagi nanti", reason: (error as Error).message, }, { status: 500 }); From bbe4836edb87259142c601a6cc32b68106c421b4 Mon Sep 17 00:00:00 2001 From: amel Date: Tue, 13 Aug 2024 11:17:37 +0800 Subject: [PATCH 5/6] upd: api address Deskripsi: - hapus semua penggunaan api address - fungetall member in index No Issues --- src/module/_global/bin/api_address.ts | 45 ------------------- src/module/_global/index.ts | 2 - .../announcement/ui/detail_announcement.tsx | 1 - .../announcement/ui/list_announcement.tsx | 2 +- .../ui/create_anggota_division.tsx | 39 +--------------- .../division_new/ui/create_division.tsx | 2 +- src/module/division_new/ui/list_division.tsx | 2 +- .../division_new/ui/navbar_admin_division.tsx | 2 +- .../division_new/ui/navbar_create_users.tsx | 28 +++++++----- src/module/group/ui/drawer_group.tsx | 2 +- src/module/group/ui/edit_drawer_group.tsx | 2 +- src/module/group/ui/list_group_active.tsx | 2 +- .../position/ui/drawer_detail_position.tsx | 2 +- .../position/ui/drawer_list_position.tsx | 2 +- .../position/ui/list_position_active.tsx | 2 +- src/module/user/index.ts | 2 + src/module/user/member/index.ts | 2 +- src/module/user/member/ui/create_member.tsx | 2 +- .../user/member/ui/drawer_detail_member.tsx | 4 +- src/module/user/member/ui/edit_member.tsx | 12 ++--- .../user/member/ui/navbar_detail_member.tsx | 2 +- src/module/user/member/ui/tab_list_member.tsx | 2 +- 22 files changed, 43 insertions(+), 118 deletions(-) delete mode 100644 src/module/_global/bin/api_address.ts diff --git a/src/module/_global/bin/api_address.ts b/src/module/_global/bin/api_address.ts deleted file mode 100644 index f240546..0000000 --- a/src/module/_global/bin/api_address.ts +++ /dev/null @@ -1,45 +0,0 @@ -export const API_ADDRESS = { - // Group - "apiGetAllGroup": "/api/group/get?path=get-all-group", - "apiGetOneGroup": "/api/group/get?path=get-one-group", - "apiCreateGroup": "/api/group/post?path=create-group", - "apiUpdateGroup": "/api/group/post?path=update-group", - "apiDeleteGroup": "/api/group/post?path=delete-group", - - // User - "apiGetAllUser": "/api/user/get?path=get-all-users", - "apiGetOneUser": "/api/user/get?path=get-one-users", - "apiCreateUser": "/api/user/post?path=create-users", - "apiUpdateUser": "/api/user/post?path=update-users", - "apiDeleteUser": "/api/user/post?path=delete-users", - "apiGetRoleUser": "/api/user/get?path=get-role-user", - - // Announcement - "apiGetAllAnnouncement": "/api/announcement/get?path=get-all-announcement", - "apiGetOneAnnouncement": "/api/announcement/get?path=get-one-announcement", - "apiGetUserAnnouncement": "/api/announcement/get?path=get-user-announcement", - "apiCreateAnnouncement": "/api/announcement/post?path=create-announcement", - "apiUpdateAnnouncement": "/api/announcement/post?path=update-announcement", - "apiDeleteAnnouncement": "/api/announcement/post?path=delete-announcement", - - // Village - "apiGetAllVillage": "/api/village/get?path=get-all-village", - "apiGetOneVillage": "/api/village/get?path=get-one-village", - "apiCreateVillage": "/api/village/post?path=create-village", - "apiUpdateVillage": "/api/village/post?path=update-village", - "apiDeleteVillage": "/api/village/post?path=delete-village", - - // Position - "apiGetAllPosition": "/api/position/get?path=get-all-position", - "apiGetOnePosition": "/api/position/get?path=get-one-position", - "apiCreatePosition": "/api/position/post?path=create-position", - "apiUpdatePosition": "/api/position/post?path=update-position", - "apiDeletePosition": "/api/position/post?path=delete-position", - - - // Division - "apiGetAllDivision": "/api/division/get?path=get-all-division", - "apiGetOneDivision": "/api/division/get?path=get-one-division", - "apiGetOneDetailDivision": "/api/division/get?path=get-one-detail-division", - "apiCreateDivision": "/api/division/post?path=create-division", -} \ No newline at end of file diff --git a/src/module/_global/index.ts b/src/module/_global/index.ts index b047a14..58ce0d8 100644 --- a/src/module/_global/index.ts +++ b/src/module/_global/index.ts @@ -1,4 +1,3 @@ -import { API_ADDRESS } from "./bin/api_address"; import prisma from "./bin/prisma"; import { pwd_key_config } from "./bin/val_global"; import SkeletonSingle from "./components/skeleton_single"; @@ -21,5 +20,4 @@ export { LayoutNavbarNew }; export { ViewFilter }; export { prisma }; export { pwd_key_config }; -export { API_ADDRESS }; export {SkeletonSingle} \ No newline at end of file diff --git a/src/module/announcement/ui/detail_announcement.tsx b/src/module/announcement/ui/detail_announcement.tsx index 2dffc49..bac0836 100644 --- a/src/module/announcement/ui/detail_announcement.tsx +++ b/src/module/announcement/ui/detail_announcement.tsx @@ -1,5 +1,4 @@ "use client" -import { API_ADDRESS } from "@/module/_global"; import { Box, Flex, Grid, Group, Spoiler, Stack, Text } from "@mantine/core"; import { useShallowEffect } from "@mantine/hooks"; import { useState } from "react"; diff --git a/src/module/announcement/ui/list_announcement.tsx b/src/module/announcement/ui/list_announcement.tsx index abd8691..bc1cf55 100644 --- a/src/module/announcement/ui/list_announcement.tsx +++ b/src/module/announcement/ui/list_announcement.tsx @@ -1,5 +1,5 @@ 'use client' -import { API_ADDRESS, WARNA } from '@/module/_global'; +import { WARNA } from '@/module/_global'; import { ActionIcon, Box, Center, Divider, Grid, Group, Spoiler, Text, TextInput } from '@mantine/core'; import React, { useState } from 'react'; import { TfiAnnouncement } from "react-icons/tfi"; diff --git a/src/module/division_new/ui/create_anggota_division.tsx b/src/module/division_new/ui/create_anggota_division.tsx index b0614d6..99a7424 100644 --- a/src/module/division_new/ui/create_anggota_division.tsx +++ b/src/module/division_new/ui/create_anggota_division.tsx @@ -1,53 +1,18 @@ "use client" -import { API_ADDRESS, LayoutNavbarNew, WARNA } from '@/module/_global'; +import { LayoutNavbarNew, WARNA } from '@/module/_global'; import LayoutModal from '@/module/_global/layout/layout_modal'; import { funGetUserByCookies } from '@/module/auth'; -import { TypeUser } from '@/module/user'; -import { useHookstate } from '@hookstate/core'; +import { funGetAllmember, TypeUser } from '@/module/user'; import { Avatar, Box, Button, Divider, Group, Stack, Text, TextInput } from '@mantine/core'; import { useParams, useRouter } from 'next/navigation'; import React, { useState } from 'react'; import toast from 'react-hot-toast'; import { FaCheck } from 'react-icons/fa6'; import { HiMagnifyingGlass } from 'react-icons/hi2'; -import { globalMemberDivision } from '../lib/val_division'; import { useShallowEffect } from '@mantine/hooks'; -import { funGetAllmember } from '@/module/user/member/lib/api_member'; import { IDataMemberDivision } from '../lib/type_division'; import { funAddDivisionMember, funGetDivisionById } from '../lib/api_division'; -const dataUser = [ - { - id: 1, - img: "https://i.pravatar.cc/1000?img=3", - name: "Doni Setiawan", - }, - { - id: 2, - img: "https://i.pravatar.cc/1000?img=10", - name: "Ilham Udin", - }, - { - id: 3, - img: "https://i.pravatar.cc/1000?img=11", - name: "Didin Anang", - }, - { - id: 4, - img: "https://i.pravatar.cc/1000?img=21", - name: "Angga Saputra", - }, - { - id: 5, - img: "https://i.pravatar.cc/1000?img=32", - name: "Marcel Widianto", - }, - { - id: 6, - img: "https://i.pravatar.cc/1000?img=37", - name: "Bagas Nusantara", - }, -]; export default function CreateAnggotaDivision() { const router = useRouter() diff --git a/src/module/division_new/ui/create_division.tsx b/src/module/division_new/ui/create_division.tsx index d5ef1d9..ee44afb 100644 --- a/src/module/division_new/ui/create_division.tsx +++ b/src/module/division_new/ui/create_division.tsx @@ -1,5 +1,5 @@ "use client"; -import { API_ADDRESS, LayoutNavbarNew, WARNA } from "@/module/_global"; +import { LayoutNavbarNew, WARNA } from "@/module/_global"; import { useHookstate } from "@hookstate/core"; import { Avatar, diff --git a/src/module/division_new/ui/list_division.tsx b/src/module/division_new/ui/list_division.tsx index 48492b5..518b7fe 100644 --- a/src/module/division_new/ui/list_division.tsx +++ b/src/module/division_new/ui/list_division.tsx @@ -1,5 +1,5 @@ 'use client' -import { API_ADDRESS, LayoutDrawer, LayoutNavbarNew, WARNA } from '@/module/_global'; +import { LayoutDrawer, LayoutNavbarNew, WARNA } from '@/module/_global'; import { ActionIcon, Avatar, Box, Card, Center, Divider, Flex, Grid, Group, Text, TextInput, Title } from '@mantine/core'; import { useRouter, useSearchParams } from 'next/navigation'; import React, { useState } from 'react'; diff --git a/src/module/division_new/ui/navbar_admin_division.tsx b/src/module/division_new/ui/navbar_admin_division.tsx index 864b876..915c660 100644 --- a/src/module/division_new/ui/navbar_admin_division.tsx +++ b/src/module/division_new/ui/navbar_admin_division.tsx @@ -1,5 +1,5 @@ "use client" -import { API_ADDRESS, LayoutNavbarNew, WARNA } from '@/module/_global'; +import { LayoutNavbarNew, WARNA } from '@/module/_global'; import { useHookstate } from '@hookstate/core'; import { Avatar, Box, Button, Checkbox, Divider, Flex, Group, Stack, Text, TextInput } from '@mantine/core'; import { useRouter } from 'next/navigation'; diff --git a/src/module/division_new/ui/navbar_create_users.tsx b/src/module/division_new/ui/navbar_create_users.tsx index 4eea828..a134077 100644 --- a/src/module/division_new/ui/navbar_create_users.tsx +++ b/src/module/division_new/ui/navbar_create_users.tsx @@ -1,12 +1,12 @@ "use client" -import { API_ADDRESS, LayoutNavbarNew, WARNA } from '@/module/_global'; +import { LayoutNavbarNew, WARNA } from '@/module/_global'; import { useHookstate } from '@hookstate/core'; import { Avatar, Box, Button, Center, Input, SimpleGrid, Stack, Text, TextInput } from '@mantine/core'; import { useShallowEffect } from '@mantine/hooks'; import { useRouter } from 'next/navigation'; import React, { useState } from 'react'; import { HiMagnifyingGlass } from 'react-icons/hi2'; -import { TypeUser } from '@/module/user'; +import { funGetAllmember, TypeUser } from '@/module/user'; import { funGetUserByCookies } from '@/module/auth'; import toast from 'react-hot-toast'; import { globalMemberDivision } from '../lib/val_division'; @@ -22,21 +22,26 @@ export default function NavbarCreateUsers({ grup, onClose }: { grup?: string, on if (selectedFiles.some((i: any) => i.id == dataMember[index].id)) { setSelectedFiles(selectedFiles.filter((i: any) => i.id != dataMember[index].id)) } else { - setSelectedFiles([...selectedFiles, {idUser: dataMember[index].id, name: dataMember[index].name}]) + setSelectedFiles([...selectedFiles, { idUser: dataMember[index].id, name: dataMember[index].name }]) } }; - async function loadData() { - const loadMember = await fetch(API_ADDRESS.apiGetAllUser + '&active=true&groupID=' + grup); + async function loadData(search: string) { + const res = await funGetAllmember('?active=true&group=' + grup + '&search=' + search); const user = await funGetUserByCookies(); - const hasil = await loadMember.json() - setDataMember(hasil.filter((i: any) => i.id != user.id)) - // cek data member sebelumnya - if (member.length > 0) { - setSelectedFiles(JSON.parse(JSON.stringify(member.get()))) + if (res.success) { + setDataMember(res.data.filter((i: any) => i.id != user.id)) + + // cek data member sebelumnya + if (member.length > 0) { + setSelectedFiles(JSON.parse(JSON.stringify(member.get()))) + } + } else { + toast.error(res.message) } + } @@ -49,7 +54,7 @@ export default function NavbarCreateUsers({ grup, onClose }: { grup?: string, on } useShallowEffect(() => { - loadData() + loadData("") }, []); return ( @@ -69,6 +74,7 @@ export default function NavbarCreateUsers({ grup, onClose }: { grup?: string, on radius={30} leftSection={} placeholder="Pencarian" + onChange={(e) => loadData(e.target.value)} /> ([]) @@ -47,7 +47,7 @@ export default function EditMember({ id }: { id: string}) { async function getOneData() { try { - const res = await funGetOneMember(id) + const res = await funGetOneMember(id) setData(res.data) getAllPosition(res.data?.idGroup) } catch (error) { @@ -59,8 +59,8 @@ export default function EditMember({ id }: { id: string}) { try { const res = await funGetAllPosition( "?active=true" + "&group=" + `${val}` - ); - setListPosition(res.data); + ); + setListPosition(res.data); } catch (error) { console.error(error) @@ -96,7 +96,7 @@ export default function EditMember({ id }: { id: string}) { async function onSubmit(val: boolean) { try { - const res = await funEditMember(id,{ + const res = await funEditMember(id, { id: data.id, nik: data.nik, name: data.name, diff --git a/src/module/user/member/ui/navbar_detail_member.tsx b/src/module/user/member/ui/navbar_detail_member.tsx index d1ac836..4fc6f3e 100644 --- a/src/module/user/member/ui/navbar_detail_member.tsx +++ b/src/module/user/member/ui/navbar_detail_member.tsx @@ -1,5 +1,5 @@ 'use client' -import { LayoutNavbarHome, LayoutIconBack, WARNA, LayoutDrawer, API_ADDRESS } from "@/module/_global"; +import { LayoutNavbarHome, LayoutIconBack, WARNA, LayoutDrawer } from "@/module/_global"; import { Box, Group, ActionIcon, Stack, Text, Center, Avatar } from "@mantine/core"; import { HiMenu } from "react-icons/hi"; import { HiUser } from "react-icons/hi2"; diff --git a/src/module/user/member/ui/tab_list_member.tsx b/src/module/user/member/ui/tab_list_member.tsx index 60cca68..a7add71 100644 --- a/src/module/user/member/ui/tab_list_member.tsx +++ b/src/module/user/member/ui/tab_list_member.tsx @@ -1,5 +1,5 @@ -import { API_ADDRESS, WARNA } from "@/module/_global" +import { WARNA } from "@/module/_global" import { Box, Group, ActionIcon, Text, TextInput } from "@mantine/core" import { useShallowEffect } from "@mantine/hooks" import { useRouter, useSearchParams } from "next/navigation" From 0dbf7e19130fb712b61609b67f21c6239e3d0937 Mon Sep 17 00:00:00 2001 From: amel Date: Tue, 13 Aug 2024 13:34:57 +0800 Subject: [PATCH 6/6] upd: discussion Deskripsi: - discussion view list - api get all, create discussion No Issues --- .../discussion/create/page.tsx | 8 +- .../[id]/(fitur-division)/discussion/page.tsx | 7 +- .../(fitur-division)/discussion/get/route.ts | 6 - .../(fitur-division)/discussion/post/route.ts | 6 - src/app/api/discussion/route.ts | 119 ++++++++++++++++++ src/app/api/division/route.ts | 4 +- src/module/discussion/index.ts | 7 ++ src/module/discussion/lib/api_discussion.ts | 20 +++ src/module/discussion/lib/type_discussion.ts | 14 +++ .../ui}/drawer_detail_discussion.tsx | 0 .../ui}/drawer_list_discussion.tsx | 5 +- .../ui}/form_create_discussion.tsx | 0 .../ui}/list_discussion.tsx | 0 .../ui}/navbar_detail_discussion.tsx | 0 .../ui}/navbar_list_discussion.tsx | 0 .../discussion/api/api_discussion.ts | 14 --- .../discussion/api/api_index.ts | 39 ------ .../discussion/api/get/getAllDiscussion.ts | 20 --- .../discussion/api/get/getOneDiscussion.ts | 34 ----- .../api/post/createCommentDiscussion.ts | 19 --- .../discussion/api/post/createDiscussion.ts | 23 ---- .../discussion/api/post/deleteDiscussion.ts | 26 ---- .../discussion/api/post/updateDiscussion.ts | 21 ---- .../view/view_create_discussion.tsx | 11 -- .../view/view_detail_discussion.tsx | 3 +- .../discussion/view/view_list_discussion.tsx | 11 -- src/module/division_new/index.ts | 6 - 27 files changed, 178 insertions(+), 245 deletions(-) delete mode 100644 src/app/api/(fitur-division)/discussion/get/route.ts delete mode 100644 src/app/api/(fitur-division)/discussion/post/route.ts create mode 100644 src/app/api/discussion/route.ts create mode 100644 src/module/discussion/index.ts create mode 100644 src/module/discussion/lib/api_discussion.ts create mode 100644 src/module/discussion/lib/type_discussion.ts rename src/module/{division_new/_division_fitur/discussion/component => discussion/ui}/drawer_detail_discussion.tsx (100%) rename src/module/{division_new/_division_fitur/discussion/component => discussion/ui}/drawer_list_discussion.tsx (72%) rename src/module/{division_new/_division_fitur/discussion/component => discussion/ui}/form_create_discussion.tsx (100%) rename src/module/{division_new/_division_fitur/discussion/component => discussion/ui}/list_discussion.tsx (100%) rename src/module/{division_new/_division_fitur/discussion/component => discussion/ui}/navbar_detail_discussion.tsx (100%) rename src/module/{division_new/_division_fitur/discussion/component => discussion/ui}/navbar_list_discussion.tsx (100%) delete mode 100644 src/module/division_new/_division_fitur/discussion/api/api_discussion.ts delete mode 100644 src/module/division_new/_division_fitur/discussion/api/api_index.ts delete mode 100644 src/module/division_new/_division_fitur/discussion/api/get/getAllDiscussion.ts delete mode 100644 src/module/division_new/_division_fitur/discussion/api/get/getOneDiscussion.ts delete mode 100644 src/module/division_new/_division_fitur/discussion/api/post/createCommentDiscussion.ts delete mode 100644 src/module/division_new/_division_fitur/discussion/api/post/createDiscussion.ts delete mode 100644 src/module/division_new/_division_fitur/discussion/api/post/deleteDiscussion.ts delete mode 100644 src/module/division_new/_division_fitur/discussion/api/post/updateDiscussion.ts delete mode 100644 src/module/division_new/_division_fitur/discussion/view/view_create_discussion.tsx delete mode 100644 src/module/division_new/_division_fitur/discussion/view/view_list_discussion.tsx diff --git a/src/app/(application)/division/[id]/(fitur-division)/discussion/create/page.tsx b/src/app/(application)/division/[id]/(fitur-division)/discussion/create/page.tsx index adbe0c1..bc70708 100644 --- a/src/app/(application)/division/[id]/(fitur-division)/discussion/create/page.tsx +++ b/src/app/(application)/division/[id]/(fitur-division)/discussion/create/page.tsx @@ -1,8 +1,12 @@ -import { ViewCreateDiscussion } from "@/module/division_new"; +import { LayoutNavbarNew } from "@/module/_global"; +import { FormCreateDiscussion } from "@/module/discussion"; function Page() { return ( - + <> + } /> + + ) } diff --git a/src/app/(application)/division/[id]/(fitur-division)/discussion/page.tsx b/src/app/(application)/division/[id]/(fitur-division)/discussion/page.tsx index a7b8c80..600d9ed 100644 --- a/src/app/(application)/division/[id]/(fitur-division)/discussion/page.tsx +++ b/src/app/(application)/division/[id]/(fitur-division)/discussion/page.tsx @@ -1,9 +1,12 @@ -import { ViewListDiscussion } from '@/module/division_new'; +import { ListDiscussion, NavbarListDiscussion } from '@/module/discussion'; import React from 'react'; function Page() { return ( - +
+ + +
); } diff --git a/src/app/api/(fitur-division)/discussion/get/route.ts b/src/app/api/(fitur-division)/discussion/get/route.ts deleted file mode 100644 index f3ce008..0000000 --- a/src/app/api/(fitur-division)/discussion/get/route.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { apiDiscussion } from "@/module/division_new"; -import { NextRequest } from "next/server"; - -export async function GET(req: NextRequest) { - return apiDiscussion(req, "GET") -} \ No newline at end of file diff --git a/src/app/api/(fitur-division)/discussion/post/route.ts b/src/app/api/(fitur-division)/discussion/post/route.ts deleted file mode 100644 index e78a337..0000000 --- a/src/app/api/(fitur-division)/discussion/post/route.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { apiDiscussion } from "@/module/division_new"; -import { NextRequest } from "next/server"; - -export async function POST(req: NextRequest) { - return apiDiscussion(req, "POST") -} \ No newline at end of file diff --git a/src/app/api/discussion/route.ts b/src/app/api/discussion/route.ts new file mode 100644 index 0000000..3937f60 --- /dev/null +++ b/src/app/api/discussion/route.ts @@ -0,0 +1,119 @@ +import { prisma } from "@/module/_global"; +import { funGetUserByCookies } from "@/module/auth"; +import _ from "lodash"; +import { NextResponse } from "next/server"; + + +// GET ALL DISCUSSION DIVISION ACTIVE = TRUE +export async function GET(request: Request) { + try { + const user = await funGetUserByCookies() + if (user.id == undefined) { + return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 401 }); + } + + const { searchParams } = new URL(request.url); + const idDivision = searchParams.get("division"); + const title = searchParams.get('search'); + + + if (idDivision != "null" && idDivision != null && idDivision != undefined) { + const cekDivision = await prisma.division.count({ + where: { + id: idDivision, + isActive: true + } + }) + + if (cekDivision == 0) { + return NextResponse.json({ success: false, message: "Gagal mendapatkan divisi, data tidak ditemukan" }, { status: 404 }); + } + + const data = await prisma.divisionDisscussion.findMany({ + where: { + isActive: true, + idDivision: idDivision, + title: { + contains: (title == undefined || title == "null") ? "" : title, + mode: "insensitive" + } + }, + orderBy: { + createdAt: 'desc' + }, + select: { + id: true, + title: true, + desc: true, + status: true, + createdAt: true, + User: { + select: { + name: true + } + }, + DivisionDisscussionComment: { + select: { + id: true, + } + } + } + }); + + + + const fixData = data.map((v: any) => ({ + ..._.omit(v, ["User", "DivisionDisscussionComment"]), + user_name: v.User.name, + total_komentar: v.DivisionDisscussionComment.length + })) + + return NextResponse.json({ success: true, message: "Berhasil mendapatkan diskusi", data: fixData, }, { status: 200 }); + + } else { + return NextResponse.json({ success: false, message: "Gagal mendapatkan divisi, data tidak ditemukan" }, { status: 404 }); + } + + } catch (error) { + console.log(error); + return NextResponse.json({ success: false, message: "Gagal mendapatkan diskusi, coba lagi nanti", reason: (error as Error).message, }, { status: 500 }); + } +} + + + +// CREATE DISCUSSION +export async function POST(request: Request) { + try { + const user = await funGetUserByCookies() + if (user.id == undefined) { + return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 401 }); + } + + const { idDivision, desc } = (await request.json()); + + const cekDivision = await prisma.division.count({ + where: { + id: idDivision, + isActive: true + } + }) + + if (cekDivision == 0) { + return NextResponse.json({ success: false, message: "Gagal mendapatkan divisi, data tidak ditemukan" }, { status: 404 }); + } + + const data = await prisma.divisionDisscussion.create({ + data: { + idDivision, + desc, + createdBy: user.id + }, + }); + + return NextResponse.json({ success: true, message: "Berhasil menambahkan diskusi", data, }, { status: 200 }); + } catch (error) { + console.log(error); + return NextResponse.json({ success: false, message: "Gagal menambahkan diskusi, coba lagi nanti", reason: (error as Error).message, }, { status: 500 }); + } +}; \ No newline at end of file diff --git a/src/app/api/division/route.ts b/src/app/api/division/route.ts index a868884..848fdc0 100644 --- a/src/app/api/division/route.ts +++ b/src/app/api/division/route.ts @@ -19,7 +19,7 @@ export async function GET(request: Request) { const idGroup = searchParams.get("group"); const name = searchParams.get('search'); - if (idGroup == null || idGroup == undefined) { + if (idGroup == "null" || idGroup == undefined) { grup = user.idGroup } else { grup = idGroup @@ -31,7 +31,7 @@ export async function GET(request: Request) { idVillage: String(villaId), idGroup: grup, name: { - contains: (name == undefined || name == null) ? "" : name, + contains: (name == undefined || name == "null") ? "" : name, mode: "insensitive" } }, diff --git a/src/module/discussion/index.ts b/src/module/discussion/index.ts new file mode 100644 index 0000000..13e1c2f --- /dev/null +++ b/src/module/discussion/index.ts @@ -0,0 +1,7 @@ +import FormCreateDiscussion from "./ui/form_create_discussion"; +import ListDiscussion from "./ui/list_discussion"; +import NavbarListDiscussion from "./ui/navbar_list_discussion"; + +export { ListDiscussion } +export { NavbarListDiscussion } +export { FormCreateDiscussion } \ No newline at end of file diff --git a/src/module/discussion/lib/api_discussion.ts b/src/module/discussion/lib/api_discussion.ts new file mode 100644 index 0000000..68ff0d0 --- /dev/null +++ b/src/module/discussion/lib/api_discussion.ts @@ -0,0 +1,20 @@ +import { IFormDiscussion } from "./type_discussion"; + +export const funGetAllDiscussion = async (path?: string) => { + const response = await fetch(`/api/discussion${(path) ? path : ''}`, { next: { tags: ['discussion'] } }); + return await response.json().catch(() => null); +} + +export const funCreateDiscussion = async (data: IFormDiscussion) => { + if (data.desc == "") + return { success: false, message: 'Diskusi tidak boleh kosong' } + + const response = await fetch("/api/discussion", { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(data), + }); + return await response.json().catch(() => null); +} \ No newline at end of file diff --git a/src/module/discussion/lib/type_discussion.ts b/src/module/discussion/lib/type_discussion.ts new file mode 100644 index 0000000..02cef86 --- /dev/null +++ b/src/module/discussion/lib/type_discussion.ts @@ -0,0 +1,14 @@ +export interface IDataDiscussion { + id: string + title: string + desc: string + status: boolean + createdAt: string + user_name: string + total_komentar: number +} + +export interface IFormDiscussion { + desc: string, + idDivision: string +} \ No newline at end of file diff --git a/src/module/division_new/_division_fitur/discussion/component/drawer_detail_discussion.tsx b/src/module/discussion/ui/drawer_detail_discussion.tsx similarity index 100% rename from src/module/division_new/_division_fitur/discussion/component/drawer_detail_discussion.tsx rename to src/module/discussion/ui/drawer_detail_discussion.tsx diff --git a/src/module/division_new/_division_fitur/discussion/component/drawer_list_discussion.tsx b/src/module/discussion/ui/drawer_list_discussion.tsx similarity index 72% rename from src/module/division_new/_division_fitur/discussion/component/drawer_list_discussion.tsx rename to src/module/discussion/ui/drawer_list_discussion.tsx index 767fae0..cf2d982 100644 --- a/src/module/division_new/_division_fitur/discussion/component/drawer_list_discussion.tsx +++ b/src/module/discussion/ui/drawer_list_discussion.tsx @@ -1,15 +1,18 @@ import { WARNA } from "@/module/_global"; import { Box, Stack, SimpleGrid, Flex, Text } from "@mantine/core"; +import { useParams } from "next/navigation"; import { IoAddCircle } from "react-icons/io5"; export default function DrawerListDiscussion() { + const param = useParams<{ id: string }>() + return ( - window.location.href = "/discussion/create"} justify={'center'} align={'center'} direction={'column'} > + window.location.href = "/division/" + param.id + "/discussion/create"} justify={'center'} align={'center'} direction={'column'} > diff --git a/src/module/division_new/_division_fitur/discussion/component/form_create_discussion.tsx b/src/module/discussion/ui/form_create_discussion.tsx similarity index 100% rename from src/module/division_new/_division_fitur/discussion/component/form_create_discussion.tsx rename to src/module/discussion/ui/form_create_discussion.tsx diff --git a/src/module/division_new/_division_fitur/discussion/component/list_discussion.tsx b/src/module/discussion/ui/list_discussion.tsx similarity index 100% rename from src/module/division_new/_division_fitur/discussion/component/list_discussion.tsx rename to src/module/discussion/ui/list_discussion.tsx diff --git a/src/module/division_new/_division_fitur/discussion/component/navbar_detail_discussion.tsx b/src/module/discussion/ui/navbar_detail_discussion.tsx similarity index 100% rename from src/module/division_new/_division_fitur/discussion/component/navbar_detail_discussion.tsx rename to src/module/discussion/ui/navbar_detail_discussion.tsx diff --git a/src/module/division_new/_division_fitur/discussion/component/navbar_list_discussion.tsx b/src/module/discussion/ui/navbar_list_discussion.tsx similarity index 100% rename from src/module/division_new/_division_fitur/discussion/component/navbar_list_discussion.tsx rename to src/module/discussion/ui/navbar_list_discussion.tsx diff --git a/src/module/division_new/_division_fitur/discussion/api/api_discussion.ts b/src/module/division_new/_division_fitur/discussion/api/api_discussion.ts deleted file mode 100644 index 9a248e1..0000000 --- a/src/module/division_new/_division_fitur/discussion/api/api_discussion.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { NextRequest } from "next/server"; -import { API_INDEX_DISCUSSION } from "./api_index"; -type Method = "GET" | "POST"; - -export async function apiDiscussion(req: NextRequest, method: Method) { - const { searchParams } = new URL(req.url); - const path = searchParams.get("path"); - const act = API_INDEX_DISCUSSION.find((v) => v.path === path && v.method === method); - if (!path) - return Response.json({ message: "page not found" }, { status: 404 }); - if (act) return act.bin(req); - - return Response.json({ message: "404" }); -} diff --git a/src/module/division_new/_division_fitur/discussion/api/api_index.ts b/src/module/division_new/_division_fitur/discussion/api/api_index.ts deleted file mode 100644 index 90ad955..0000000 --- a/src/module/division_new/_division_fitur/discussion/api/api_index.ts +++ /dev/null @@ -1,39 +0,0 @@ -import getAllDiscussion from "./get/getAllDiscussion"; -import getOneDiscussion from "./get/getOneDiscussion"; -import createCommentDiscussion from "./post/createCommentDiscussion"; -import createDiscussion from "./post/createDiscussion"; -import deleteDiscussion from "./post/deleteDiscussion"; -import updateDiscussion from "./post/updateDiscussion"; - -export const API_INDEX_DISCUSSION = [ - { - path: "get-all-discussion", - method: "GET", - bin: getAllDiscussion, - }, - { - path: "get-one-discussion", - method: "GET", - bin: getOneDiscussion, - }, - { - path: "create-discussion", - method: "POST", - bin: createDiscussion, - }, - { - path: "create-comment-discussion", - method: "POST", - bin: createCommentDiscussion, - }, - { - path: "update-discussion", - method: "POST", - bin: updateDiscussion, - }, - { - path: "delete-discussion", - method: "POST", - bin: deleteDiscussion, - }, -]; diff --git a/src/module/division_new/_division_fitur/discussion/api/get/getAllDiscussion.ts b/src/module/division_new/_division_fitur/discussion/api/get/getAllDiscussion.ts deleted file mode 100644 index 68538a1..0000000 --- a/src/module/division_new/_division_fitur/discussion/api/get/getAllDiscussion.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { prisma } from "@/module/_global"; -import { NextRequest } from "next/server"; - -export default async function getAllDiscussion(req: NextRequest) { - try { - const searchParams = req.nextUrl.searchParams - const divisionID = searchParams.get('divisionID'); - const data = await prisma.divisionDisscussion.findMany({ - where: { - isActive: true, - idDivision: String(divisionID) - } - }) - - return Response.json(data); - } catch (error) { - console.error(error); - return Response.json({ success: false, message: "Internal Server Error" }, { status: 500 }); - } -} \ No newline at end of file diff --git a/src/module/division_new/_division_fitur/discussion/api/get/getOneDiscussion.ts b/src/module/division_new/_division_fitur/discussion/api/get/getOneDiscussion.ts deleted file mode 100644 index d9abb3a..0000000 --- a/src/module/division_new/_division_fitur/discussion/api/get/getOneDiscussion.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { prisma } from "@/module/_global"; -import { NextRequest } from "next/server"; - -export default async function getOneDiscussion(req: NextRequest) { - try { - const searchParams = req.nextUrl.searchParams - const id = searchParams.get('id'); - const data = await prisma.divisionDisscussion.findUnique({ - where: { - id: String(id) - } - }) - - const comment = await prisma.divisionDisscussionComment.findMany({ - where: { - idDisscussion: String(id) - } - }) - - const allData = { - data: data, - comment: comment - } - - return Response.json(allData); - - } catch (error) { - console.error(error); - return Response.json( - { message: "Internal Server Error", success: false }, - { status: 500 } - ); - } -} \ No newline at end of file diff --git a/src/module/division_new/_division_fitur/discussion/api/post/createCommentDiscussion.ts b/src/module/division_new/_division_fitur/discussion/api/post/createCommentDiscussion.ts deleted file mode 100644 index fafe8b8..0000000 --- a/src/module/division_new/_division_fitur/discussion/api/post/createCommentDiscussion.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { prisma } from "@/module/_global"; - -export default async function createCommentDiscussion(req: Request) { - try { - const data = await req.json() - const insert = await prisma.divisionDisscussionComment.create({ - data: { - idDisscussion: data.idDiscussion, - comment: data.comment, - createdBy: data.createdBy - } - }) - return Response.json(insert, { status: 201 }); - - } catch (error) { - console.error(error); - return Response.json({ success: false, message: "Internal Server Error" }, { status: 500 }); - } -} \ No newline at end of file diff --git a/src/module/division_new/_division_fitur/discussion/api/post/createDiscussion.ts b/src/module/division_new/_division_fitur/discussion/api/post/createDiscussion.ts deleted file mode 100644 index 596ff99..0000000 --- a/src/module/division_new/_division_fitur/discussion/api/post/createDiscussion.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { prisma } from "@/module/_global"; - -export default async function createDiscussion(req: Request) { - try { - const data = await req.json(); - const insert = await prisma.divisionDisscussion.create({ - data: { - idDivision: data.idDivision, - desc: data.desc, - createdBy: data.createdBy - }, - select: { - id: true - } - }) - - return Response.json(insert, { status: 201 }); - - } catch (error) { - console.error(error); - return Response.json({ success: false, message: "Internal Server Error" }, { status: 500 }); - } -} \ No newline at end of file diff --git a/src/module/division_new/_division_fitur/discussion/api/post/deleteDiscussion.ts b/src/module/division_new/_division_fitur/discussion/api/post/deleteDiscussion.ts deleted file mode 100644 index f2667a9..0000000 --- a/src/module/division_new/_division_fitur/discussion/api/post/deleteDiscussion.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { prisma } from "@/module/_global"; - -export default async function deleteDiscussion(req: Request) { - try { - const data = await req.json() - const del = await prisma.divisionDisscussion.update({ - where: { - id: data.id - }, - data: { - isActive: false - } - }) - - return Response.json( - { success: true, message: "Sukses Delete Diskusi" }, - { status: 200 } - ); - } catch (error) { - console.error(error); - return Response.json( - { message: "Internal Server Error", success: false }, - { status: 500 } - ); - } -} \ No newline at end of file diff --git a/src/module/division_new/_division_fitur/discussion/api/post/updateDiscussion.ts b/src/module/division_new/_division_fitur/discussion/api/post/updateDiscussion.ts deleted file mode 100644 index 9bd45e5..0000000 --- a/src/module/division_new/_division_fitur/discussion/api/post/updateDiscussion.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { prisma } from "@/module/_global"; - -export default async function updateDiscussion(req: Request) { - try { - const data = await req.json() - - const update = await prisma.divisionDisscussion.update({ - where:{ - id: data.id - }, - data:{ - desc: data.desc, - } - }) - - return Response.json({ success: true, message: "Sukses Update Diskusi" }, { status: 200 }); - } catch (error) { - console.error(error); - return Response.json({ message: "Internal Server Error", success: false }, { status: 500 }); - } -} \ No newline at end of file diff --git a/src/module/division_new/_division_fitur/discussion/view/view_create_discussion.tsx b/src/module/division_new/_division_fitur/discussion/view/view_create_discussion.tsx deleted file mode 100644 index 66a67cf..0000000 --- a/src/module/division_new/_division_fitur/discussion/view/view_create_discussion.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import { LayoutNavbarNew } from "@/module/_global"; -import FormCreateDiscussion from "../component/form_create_discussion"; - -export default function ViewCreateDiscussion() { - return ( - <> - } /> - - - ) -} \ No newline at end of file diff --git a/src/module/division_new/_division_fitur/discussion/view/view_detail_discussion.tsx b/src/module/division_new/_division_fitur/discussion/view/view_detail_discussion.tsx index 0a44c58..d0b3b22 100644 --- a/src/module/division_new/_division_fitur/discussion/view/view_detail_discussion.tsx +++ b/src/module/division_new/_division_fitur/discussion/view/view_detail_discussion.tsx @@ -1,6 +1,5 @@ "use client" import { Avatar, Badge, Box, Center, Divider, Flex, Grid, Group, Text, TextInput } from "@mantine/core"; -import NavbarDetailDiscussion from "../component/navbar_detail_discussion"; import { WARNA } from "@/module/_global"; import { GrChatOption } from "react-icons/gr"; import { LuSendHorizonal } from "react-icons/lu"; @@ -52,7 +51,7 @@ export default function ViewDetailDiscussion() { return ( <> - + {/* */} - - - - ); -} \ No newline at end of file diff --git a/src/module/division_new/index.ts b/src/module/division_new/index.ts index cb090e6..e2c6f07 100644 --- a/src/module/division_new/index.ts +++ b/src/module/division_new/index.ts @@ -8,11 +8,8 @@ import ViewDetailEventDivision from "./_division_fitur/calender/view/view_detail import ViewDivisionCalender from "./_division_fitur/calender/view/view_division_calender"; import ViewHistoryDivisionCalender from "./_division_fitur/calender/view/view_history_division_calender"; import ViewUpdateDivisionCalender from "./_division_fitur/calender/view/view_update_division_calender"; -import { apiDiscussion } from "./_division_fitur/discussion/api/api_discussion"; -import ViewCreateDiscussion from "./_division_fitur/discussion/view/view_create_discussion"; import ViewDetailDiscussion from "./_division_fitur/discussion/view/view_detail_discussion"; import ViewEditDiscussion from "./_division_fitur/discussion/view/view_edit_discussion"; -import ViewListDiscussion from "./_division_fitur/discussion/view/view_list_discussion"; import ViewDocumentDivision from "./_division_fitur/document/view/view_document_division"; import ViewCreateTaskDivision from "./_division_fitur/task/view/view_create_division_task"; import ViewDetailDivisionTask from "./_division_fitur/task/view/view_detail_division_task"; @@ -49,12 +46,9 @@ export { ViewDetailEventDivision }; export { ViewUpdateDivisionCalender }; export { UpdateUserDivisionCalender }; export { UpdateUlangiEvent }; -export { ViewListDiscussion }; -export { ViewCreateDiscussion }; export { ViewDetailDiscussion }; export { ViewEditDiscussion }; export { ViewDocumentDivision }; -export { apiDiscussion } export type { IFormDivision, IFormMemberDivision, IFormFixDivision, IDataDivison, IDataMemberDivision } export { ListDivision } export { CreateDivision }