diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 43b4898..83e6a62 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -364,6 +364,7 @@ model DivisionDocumentFolderFile { id String @id @default(cuid()) Division Division @relation(fields: [idDivision], references: [id]) idDivision String + idStorage String? category String @default("FOLDER") // FOLDER OR FILE name String extension String diff --git a/src/app/api/document/route.ts b/src/app/api/document/route.ts index c34cd03..f45bf14 100644 --- a/src/app/api/document/route.ts +++ b/src/app/api/document/route.ts @@ -129,6 +129,7 @@ export async function GET(request: Request) { formatDataShare = dataShare.map((v: any) => ({ ..._.omit(v, ["DivisionDocumentFolderFile"]), + idStorage: '', id: v.DivisionDocumentFolderFile.id, category: v.DivisionDocumentFolderFile.category, name: v.DivisionDocumentFolderFile.name, @@ -156,6 +157,7 @@ export async function GET(request: Request) { category: true, name: true, extension: true, + idStorage: true, path: true, User: { select: { diff --git a/src/app/api/document/upload/route.ts b/src/app/api/document/upload/route.ts index eb9095b..6dd776f 100644 --- a/src/app/api/document/upload/route.ts +++ b/src/app/api/document/upload/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 { NextResponse } from "next/server"; @@ -70,33 +70,29 @@ export async function POST(request: Request) { const fExt = file.name.split(".").pop() const fName = file.name.replace("." + fExt, "") + const upload = await funUploadFile({ file: file, dirId: DIR.document }) + if (upload.success) { + const dataInsert = await prisma.divisionDocumentFolderFile.create({ + data: { + name: fName, + path: idPath, + idDivision, + category: "FILE", + extension: String(fExt), + createdBy: user.id, + idStorage: upload.data.id + }, + select: { + id: true + } + }); - const dataInsert = await prisma.divisionDocumentFolderFile.create({ - data: { - name: fName, - path: idPath, - idDivision, - category: "FILE", - extension: String(fExt), - createdBy: user.id, - }, - select: { - id: true - } - }); - - const root = path.join(process.cwd(), "./public/file/dokumen/"); - const nameFix = dataInsert.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); - - // create log user - const log = await createLogUser({ act: 'CREATE', desc: 'User mengupload file baru', table: 'divisionDocumentFolderFile', data: dataInsert.id }) - - return NextResponse.json({ success: true, message: "Berhasil upload file" }, { status: 200 }); + // create log user + const log = await createLogUser({ act: 'CREATE', desc: 'User mengupload file baru', table: 'divisionDocumentFolderFile', data: dataInsert.id }) + return NextResponse.json({ success: true, message: "Berhasil upload file" }, { status: 200 }); + } else { + return NextResponse.json({ success: false, message: "Gagal upload file, coba lagi nanti" }, { status: 400 }); + } } catch (error) { console.error(error); return NextResponse.json({ success: false, message: "Gagal upload file, coba lagi nanti", reason: (error as Error).message, }, { status: 500 }); diff --git a/src/module/document/lib/type_document.ts b/src/module/document/lib/type_document.ts index 14992f9..25e7638 100644 --- a/src/module/document/lib/type_document.ts +++ b/src/module/document/lib/type_document.ts @@ -1,4 +1,5 @@ export interface IDataDocument { + idStorage: string; id: string; name: string; extension: string; diff --git a/src/module/document/ui/drawer_menu_document_division.tsx b/src/module/document/ui/drawer_menu_document_division.tsx index 18b0a31..2e3139d 100644 --- a/src/module/document/ui/drawer_menu_document_division.tsx +++ b/src/module/document/ui/drawer_menu_document_division.tsx @@ -114,7 +114,10 @@ export default function DrawerMenuDocumentDivision() { maxSize={3 * 1024 ** 2} accept={['text/csv', 'image/png', 'image/jpeg', 'image/heic', 'application/pdf']} onReject={(files) => { - return toast.error('File yang diizinkan: .csv, .png, .jpg, .heic, .pdf dengan ukuran maksimal 3 MB') + refresh.set(true) + setOpenModal(false) + setOpenDrawerDocument(false) + toast.error('File yang diizinkan: .csv, .png, .jpg, .heic, .pdf dengan ukuran maksimal 3 MB') }} > openRef.current?.()}> diff --git a/src/module/document/ui/navbar_document_division.tsx b/src/module/document/ui/navbar_document_division.tsx index 79d7126..8e09dec 100644 --- a/src/module/document/ui/navbar_document_division.tsx +++ b/src/module/document/ui/navbar_document_division.tsx @@ -30,7 +30,7 @@ export default function NavbarDocumentDivision() { const param = useParams<{ id: string }>() const [isOpenModalView, setOpenModalView] = useState(false) const [isExtension, setExtension] = useState('') - const [idData, setIdData] = useState('') + const [idStorage, setIdStorage] = useState('') const [name, setName] = useState('') const [isOpen, setOpen] = useState(false) const [isDelete, setIsDelete] = useState(false) @@ -337,7 +337,7 @@ export default function NavbarDocumentDivision() { router.push('?path=' + v.id) } else if (v.category == "FILE" && selectedFiles.length == 0 && !dariSelectAll) { setExtension(v.extension) - setIdData(v.id) + setIdStorage(v.idStorage) setOpenModalView(true) } @@ -380,7 +380,7 @@ export default function NavbarDocumentDivision() { router.push('?path=' + v.id) } else if (v.category == "FILE" && selectedFiles.length == 0 && !dariSelectAll) { setExtension(v.extension) - setIdData(v.id) + setIdStorage(v.idStorage) setOpenModalView(true) } @@ -485,7 +485,7 @@ export default function NavbarDocumentDivision() { - setOpenModalView(false)} file={idData + '.' + isExtension} extension={isExtension} fitur='dokumen' /> + setOpenModalView(false)} file={idStorage} extension={isExtension} fitur='dokumen' /> ); }