From 656f71ef2b1b75c330d9a99afab831c395821a13 Mon Sep 17 00:00:00 2001 From: amel Date: Thu, 12 Sep 2024 13:34:40 +0800 Subject: [PATCH] upd: project Deskripsi: - upload file NO Issues --- prisma/schema.prisma | 1 + src/app/api/project/[id]/route.ts | 3 +- src/app/api/project/file/[id]/route.ts | 37 ++++++++----------- src/app/api/project/route.ts | 33 ++++++----------- .../_global/layout/layout_modal_view_file.tsx | 4 +- src/module/project/lib/type_project.ts | 1 + .../project/ui/create_date_end_task.tsx | 14 +++++-- src/module/project/ui/create_project.tsx | 5 +-- .../project/ui/list_file_detail_project.tsx | 5 ++- 9 files changed, 50 insertions(+), 53 deletions(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 84cc75f..43b4898 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -200,6 +200,7 @@ model ProjectFile { idProject String name String extension String + idStorage String? isActive Boolean @default(true) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt diff --git a/src/app/api/project/[id]/route.ts b/src/app/api/project/[id]/route.ts index 5ba9c8d..2d5a51e 100644 --- a/src/app/api/project/[id]/route.ts +++ b/src/app/api/project/[id]/route.ts @@ -91,7 +91,8 @@ export async function GET(request: Request, context: { params: { id: string } }) select: { id: true, name: true, - extension: true + extension: true, + idStorage: true } }) diff --git a/src/app/api/project/file/[id]/route.ts b/src/app/api/project/file/[id]/route.ts index 5f390d7..0d51d27 100644 --- a/src/app/api/project/file/[id]/route.ts +++ b/src/app/api/project/file/[id]/route.ts @@ -1,4 +1,4 @@ -import { prisma } from "@/module/_global"; +import { DIR, funDeleteFile, funUploadFile, prisma } from "@/module/_global"; import { funGetUserByCookies } from "@/module/auth"; import { NextResponse } from "next/server"; import fs from "fs"; @@ -36,8 +36,7 @@ export async function DELETE(request: Request, context: { params: { id: string } } }) - - fs.unlink(`./public/file/project/${dataRelasi?.id}.${dataRelasi?.extension}`, (err) => { }) + const delStorage = await funDeleteFile({ fileId: String(dataRelasi?.idStorage) }) const deleteRelasi = await prisma.projectFile.delete({ where: { @@ -166,31 +165,27 @@ export async function POST(request: Request, context: { params: { id: string } } if (cekFile) { - const root = path.join(process.cwd(), "./public/file/project/"); for (var pair of body.entries()) { if (String(pair[0]).substring(0, 4) == "file") { const file = body.get(pair[0]) as File const fExt = file.name.split(".").pop() const fName = file.name.replace("." + fExt, "") + const upload = await funUploadFile({ file: file, dirId: DIR.project }) + if (upload.success) { + const insertToTable = await prisma.projectFile.create({ + data: { + idStorage: upload.data.id, + idProject: id, + name: fName, + extension: String(fExt), - const insertToTable = await prisma.projectFile.create({ - data: { - idProject: id, - name: fName, - extension: String(fExt) - }, - select: { - id: true - } - }) - - const nameFix = insertToTable.id + '.' + fExt - const filePath = path.join(root, nameFix) - // Konversi ArrayBuffer ke Buffer - const buffer = Buffer.from(await file.arrayBuffer()); - // Tulis file ke sistem - fs.writeFileSync(filePath, buffer); + }, + select: { + id: true + } + }) + } } } } diff --git a/src/app/api/project/route.ts b/src/app/api/project/route.ts index 5ffa314..feec0b7 100644 --- a/src/app/api/project/route.ts +++ b/src/app/api/project/route.ts @@ -1,4 +1,4 @@ -import { prisma } from "@/module/_global"; +import { DIR, funUploadFile, prisma } from "@/module/_global"; import { funGetUserByCookies } from "@/module/auth"; import _ from "lodash"; import moment from "moment"; @@ -169,31 +169,22 @@ export async function POST(request: Request) { } if (cekFile) { - const root = path.join(process.cwd(), "./public/file/project/"); for (var pair of body.entries()) { if (String(pair[0]).substring(0, 4) == "file") { const file = body.get(pair[0]) as File const fExt = file.name.split(".").pop() const fName = file.name.replace("." + fExt, "") - - - const insertToTable = await prisma.projectFile.create({ - data: { - idProject: data.id, - name: fName, - extension: String(fExt) - }, - select: { - id: true - } - }) - - const nameFix = insertToTable.id + '.' + fExt - const filePath = path.join(root, nameFix) - // Konversi ArrayBuffer ke Buffer - const buffer = Buffer.from(await file.arrayBuffer()); - // Tulis file ke sistem - fs.writeFileSync(filePath, buffer); + const upload = await funUploadFile({ file: file, dirId: DIR.project }) + if (upload.success) { + await prisma.projectFile.create({ + data: { + idStorage: upload.data.id, + idProject: data.id, + name: fName, + extension: String(fExt) + } + }) + } } } } diff --git a/src/module/_global/layout/layout_modal_view_file.tsx b/src/module/_global/layout/layout_modal_view_file.tsx index a895d3c..4565f7f 100644 --- a/src/module/_global/layout/layout_modal_view_file.tsx +++ b/src/module/_global/layout/layout_modal_view_file.tsx @@ -55,7 +55,7 @@ export default function LayoutModal({ opened, onClose, extension, fitur, file }: }}>
{ - extension === 'pdf' ? : + extension === 'pdf' ? : {file} } diff --git a/src/module/project/lib/type_project.ts b/src/module/project/lib/type_project.ts index 57c1d00..94df9c4 100644 --- a/src/module/project/lib/type_project.ts +++ b/src/module/project/lib/type_project.ts @@ -19,6 +19,7 @@ export interface IDataFileProject { id: string name: string extension: string + idStorage:string } export interface IDataMemberProject { diff --git a/src/module/project/ui/create_date_end_task.tsx b/src/module/project/ui/create_date_end_task.tsx index 5f6dda3..c0a9f05 100644 --- a/src/module/project/ui/create_date_end_task.tsx +++ b/src/module/project/ui/create_date_end_task.tsx @@ -1,6 +1,7 @@ "use client"; import { LayoutNavbarNew, WARNA } from "@/module/_global"; import { + ActionIcon, Avatar, Box, Button, @@ -19,9 +20,10 @@ import { useRouter } from "next/navigation"; import toast from "react-hot-toast"; import moment from "moment"; import { IFormDateProject } from "../lib/type_project"; +import { HiChevronLeft } from "react-icons/hi2"; -export default function ViewDateEndTask({ onClose }: { onClose: (val: IFormDateProject) => void }) { +export default function ViewDateEndTask({ onClose, onSet }: {onClose: (val: boolean) => void, onSet: (val: IFormDateProject) => void }) { const [value, setValue] = useState<[Date | null, Date | null]>([null, null]); const router = useRouter() const [title, setTitle] = useState("") @@ -36,7 +38,7 @@ export default function ViewDateEndTask({ onClose }: { onClose: (val: IFormDateP if (title == "") return toast.error("Error! harus memasukkan judul tugas") - onClose( + onSet( { dateStart: value[0], dateEnd: value[1], @@ -48,7 +50,13 @@ export default function ViewDateEndTask({ onClose }: { onClose: (val: IFormDateP return ( - + + { onClose(true) }} bg={WARNA.bgIcon} size="lg" radius="lg" aria-label="Settings"> + + + + } title={"Tanggal Tugas"} menu /> { - setDataTask([...dataTask, val]) - setOpenTugas(false) - }} />; + if (openTugas) return { setOpenTugas(false) }} onSet={(val) => { setDataTask([...dataTask, val]); setOpenTugas(false) }} />; if (isChooseAnggota) return { setChooseAnggota(false) }} /> diff --git a/src/module/project/ui/list_file_detail_project.tsx b/src/module/project/ui/list_file_detail_project.tsx index d0371b7..91a020c 100644 --- a/src/module/project/ui/list_file_detail_project.tsx +++ b/src/module/project/ui/list_file_detail_project.tsx @@ -16,6 +16,7 @@ export default function ListFileDetailProject() { const param = useParams<{ id: string }>() const [loading, setLoading] = useState(true) const [idData, setIdData] = useState('') + const [idStorage, setIdStorage] = useState('') const [nameData, setNameData] = useState('') const [openDrawer, setOpenDrawer] = useState(false) const [isOpenModal, setOpenModal] = useState(false) @@ -52,6 +53,7 @@ export default function ListFileDetailProject() { toast.success(res.message) getOneData() setIdData("") + setIdStorage("") setOpenDrawer(false) } else { toast.error(res.message); @@ -102,6 +104,7 @@ export default function ListFileDetailProject() { setNameData(item.name + '.' + item.extension) setExtension(item.extension) setIdData(item.id) + setIdStorage(item.idStorage) setOpenDrawer(true) }} > @@ -167,7 +170,7 @@ export default function ListFileDetailProject() { setOpenModal(false) }} /> - setOpenModalView(false)} file={idData + '.' + isExtension} extension={isExtension} fitur='project' /> + setOpenModalView(false)} file={idStorage} extension={isExtension} fitur='project' /> );