From c23b94ff07c0a6bf8c85bb00c1371cbe32fd9a63 Mon Sep 17 00:00:00 2001 From: amel Date: Thu, 12 Sep 2024 10:55:56 +0800 Subject: [PATCH 1/4] upd: upload foto user --- src/app/api/user/profile/route.ts | 41 ++++++---------- src/module/_global/bin/val_global.ts | 10 +++- src/module/_global/fun/delete_file.ts | 15 +++--- src/module/_global/fun/upload_file.ts | 6 ++- src/module/_global/index.ts | 3 +- src/module/user/profile/lib/get_dir.ts | 21 --------- src/module/user/profile/ui/edit_profile.tsx | 52 ++++++++++----------- src/module/user/profile/ui/profile.tsx | 8 ++-- 8 files changed, 65 insertions(+), 91 deletions(-) delete mode 100644 src/module/user/profile/lib/get_dir.ts diff --git a/src/app/api/user/profile/route.ts b/src/app/api/user/profile/route.ts index a99c8bc..2a0ad66 100644 --- a/src/app/api/user/profile/route.ts +++ b/src/app/api/user/profile/route.ts @@ -1,4 +1,4 @@ -import { funDeleteFile, funUploadFile, prisma } from "@/module/_global"; +import { DIR, funDeleteFile, funUploadFile, prisma } from "@/module/_global"; import { funGetUserByCookies } from "@/module/auth"; import _ from "lodash"; import { NextResponse } from "next/server"; @@ -119,34 +119,21 @@ export async function PUT(request: Request) { if (String(file) != "undefined" && String(file) != "null") { const fExt = file.name.split(".").pop() - // const fileName = user.id + '.' + fExt; - const fileName = 'COBAAYAA.' + fExt; + const fileName = user.id + '.' + fExt; const newFile = new File([file], fileName, { type: file.type }); - console.log(fileName, newFile.name) - await funDeleteFile({ name: fileName, dirId: "cm0x8dbwn0005bp5tgmfcthzw" }) - await funUploadFile({ file: newFile, dirId: "cm0x8dbwn0005bp5tgmfcthzw" }) + await funDeleteFile({ fileId: String(update.img) }) + const upload = await funUploadFile({ file: newFile, dirId: DIR.user }) + if (upload.success) { + await prisma.user.update({ + where: { + id: user.id + }, + data: { + img: upload.data.id + } + }) + } - - // fs.unlink(`./public/image/user/${update.img}`, (err) => { }) - // const root = path.join(process.cwd(), "./public/image/user/"); - // const fExt = file.name.split(".").pop() - // const fileName = user.id + '.' + fExt; - // const filePath = path.join(root, fileName); - - // // Konversi ArrayBuffer ke Buffer - // const buffer = Buffer.from(await file.arrayBuffer()); - - // // Tulis file ke sistem - // fs.writeFileSync(filePath, buffer); - - // await prisma.user.update({ - // where: { - // id: user.id - // }, - // data: { - // img: fileName - // } - // }) } const log = await createLogUser({ act: 'UPDATE', desc: 'User mengupdate data profile', table: 'user', data: user.id }) diff --git a/src/module/_global/bin/val_global.ts b/src/module/_global/bin/val_global.ts index 4a5dc97..4a3b14e 100644 --- a/src/module/_global/bin/val_global.ts +++ b/src/module/_global/bin/val_global.ts @@ -1,4 +1,12 @@ import { hookstate } from "@hookstate/core" export const pwd_key_config = "fchgvjknlmdfnbvghhujlaknsdvjbhknlkmsdbdyu567t8y9u30r4587638y9uipkoeghjvuyi89ipkoefmnrjbhtiu4or9ipkoemnjfbhjiuoijdklnjhbviufojkejnshbiuojijknehgruyu" -export const globalRole = hookstate('') \ No newline at end of file +export const globalRole = hookstate('') +export const DIR = { + task: "cm0xhcqf0000dacbbixjb09yn", + project: "cm0xhc9sv000bacbb7rfikw1k", + document: "cm0xhbkf50009acbbtw03qo4l", + village: "cm0xhb91o0007acbbkx8rk8hj", + user: "cm0x8dbwn0005bp5tgmfcthzw", + +} \ No newline at end of file diff --git a/src/module/_global/fun/delete_file.ts b/src/module/_global/fun/delete_file.ts index 881c662..a4ec2c6 100644 --- a/src/module/_global/fun/delete_file.ts +++ b/src/module/_global/fun/delete_file.ts @@ -1,22 +1,21 @@ -export async function funDeleteFile({ name, dirId }: { name: String, dirId: string }) { +export async function funDeleteFile({ fileId }: { fileId: string }) { try { - const res = await fetch(`https://wibu-storage.wibudev.com/api/dir/${dirId}/${name}`, { - method: "GET", + const res = await fetch(`https://wibu-storage.wibudev.com/api/files/${fileId}/delete`, { + method: "DELETE", headers: { - Authorization: `Bearer eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjp7ImlkIjoiY20wdnQ4bzFrMDAwMDEyenE1eXl1emd5YiIsIm5hbWUiOiJhbWFsaWEiLCJlbWFpbCI6ImFtYWxpYUBiaXAuY29tIiwiQXBpS2V5IjpbeyJpZCI6ImNtMHZ0OG8xcjAwMDIxMnpxZDVzejd3eTgiLCJuYW1lIjoiZGVmYXVsdCJ9XX0sImlhdCI6MTcyNTkzNTE5MiwiZXhwIjo0ODgxNjk1MTkyfQ.7U-HUnNBDmeq_6XXohiFZjFnh2rSzUPMHDdrUKOd7G4` + Authorization: `Bearer ${process.env.WS_APIKEY}` } }); if (res.ok) { - console.log("Berhasil dapat"); const hasil = await res.json() - console.log('berhasilAmalia', hasil) - + return { success: true } } else { const errorText = await res.json(); - console.log('errorAmalia', errorText) + return { success: false } } } catch (error) { + return { success: false } console.error("Upload error:", error); } } \ No newline at end of file diff --git a/src/module/_global/fun/upload_file.ts b/src/module/_global/fun/upload_file.ts index 46b3045..49ff249 100644 --- a/src/module/_global/fun/upload_file.ts +++ b/src/module/_global/fun/upload_file.ts @@ -13,12 +13,14 @@ export async function funUploadFile({ file, dirId }: { file: File, dirId: string }); if (res.ok) { - console.log("File uploaded successfully"); + const hasil = await res.json() + return { success: true, data: hasil.data } } else { const errorText = await res.text(); - console.log('errorAmalia', errorText) + return { success: false, data: {} } } } catch (error) { console.error("Upload error:", error); + return { success: false, data: {} } } } \ No newline at end of file diff --git a/src/module/_global/index.ts b/src/module/_global/index.ts index daf18c3..228b950 100644 --- a/src/module/_global/index.ts +++ b/src/module/_global/index.ts @@ -1,5 +1,5 @@ import prisma from "./bin/prisma"; -import { globalRole, pwd_key_config } from "./bin/val_global"; +import { DIR, globalRole, pwd_key_config } from "./bin/val_global"; import SkeletonDetailDiscussionComment from "./components/skeleton_detail_discussion_comment"; import SkeletonDetailDiscussionMember from "./components/skeleton_detail_discussion_member"; import SkeletonDetailListTugasTask from "./components/skeleton_detail_list_tugas_task"; @@ -40,3 +40,4 @@ export { WrapLayout } export { NoZoom } export { funUploadFile } export { funDeleteFile } +export { DIR } diff --git a/src/module/user/profile/lib/get_dir.ts b/src/module/user/profile/lib/get_dir.ts deleted file mode 100644 index 84ddf88..0000000 --- a/src/module/user/profile/lib/get_dir.ts +++ /dev/null @@ -1,21 +0,0 @@ -export async function getListDir() { - try { - const res = await fetch("https://wibu-storage.wibudev.com/api/dir/cm0x8a1as0001bp5te7354yrp/list", { - method: "GET", - headers: { - Authorization: `Bearer eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjp7ImlkIjoiY20wdnQ4bzFrMDAwMDEyenE1eXl1emd5YiIsIm5hbWUiOiJhbWFsaWEiLCJlbWFpbCI6ImFtYWxpYUBiaXAuY29tIiwiQXBpS2V5IjpbeyJpZCI6ImNtMHZ0OG8xcjAwMDIxMnpxZDVzejd3eTgiLCJuYW1lIjoiZGVmYXVsdCJ9XX0sImlhdCI6MTcyNTkzNTE5MiwiZXhwIjo0ODgxNjk1MTkyfQ.7U-HUnNBDmeq_6XXohiFZjFnh2rSzUPMHDdrUKOd7G4` - } - }); - - if (res.ok) { - const hasil = await res.json() - console.log("File uploaded successfully"); - console.log(hasil) - } else { - const errorText = await res.text(); - console.log(errorText) - } - } catch (error) { - console.error("Upload error:", error); - } -} \ No newline at end of file diff --git a/src/module/user/profile/ui/edit_profile.tsx b/src/module/user/profile/ui/edit_profile.tsx index 75ca4b2..7e7146f 100644 --- a/src/module/user/profile/ui/edit_profile.tsx +++ b/src/module/user/profile/ui/edit_profile.tsx @@ -1,5 +1,5 @@ "use client" -import { LayoutNavbarNew, WARNA } from "@/module/_global"; +import { DIR, LayoutNavbarNew, WARNA } from "@/module/_global"; import { Avatar, Box, Button, Flex, Indicator, Modal, rem, Select, Skeleton, Stack, Text, TextInput } from "@mantine/core"; import toast from "react-hot-toast"; import LayoutModal from "@/module/_global/layout/layout_modal"; @@ -45,7 +45,7 @@ export default function EditProfile() { setLoading(true) const res = await funGetProfileByCookies() setData(res.data) - setIMG(`/api/file/img?jenis=image&cat=user&file=${res.data.img}`) + setIMG(`https://wibu-storage.wibudev.com/api/files/${res.data.img}`) setLoading(false) } catch (error) { console.error(error); @@ -258,31 +258,31 @@ export default function EditProfile() { zIndex: 999, backgroundColor: `${WARNA.bgWhite}`, }}> - {loading ? - + {loading ? + : - + } setValModal(false)} diff --git a/src/module/user/profile/ui/profile.tsx b/src/module/user/profile/ui/profile.tsx index 25cfcac..94e76fa 100644 --- a/src/module/user/profile/ui/profile.tsx +++ b/src/module/user/profile/ui/profile.tsx @@ -1,7 +1,6 @@ "use client" -import { LayoutIconBack, LayoutNavbarHome, SkeletonDetailProfile, WARNA } from "@/module/_global"; -import { ActionIcon, Anchor, Avatar, Box, Button, Flex, Grid, Group, SimpleGrid, Skeleton, Stack, Text } from "@mantine/core"; -import { HiUser } from "react-icons/hi2"; +import { DIR, LayoutIconBack, LayoutNavbarHome, SkeletonDetailProfile, WARNA } from "@/module/_global"; +import { ActionIcon, Avatar, Box, Grid, Group, Skeleton, Stack, Text } from "@mantine/core"; import { RiIdCardFill } from "react-icons/ri"; import { FaSquarePhone } from "react-icons/fa6"; import { MdEmail } from "react-icons/md"; @@ -27,8 +26,7 @@ export default function Profile() { setLoading(true) const res = await funGetProfileByCookies() setData(res.data) - setIMG(`/api/file/img?jenis=image&cat=user&file=${res.data.img}`) - // setIMG(`https://wibu-storage.wibudev.com/api/files/view/cm0x8dbwn0005bp5tgmfcthzw/${res.data.img}`) + setIMG(`https://wibu-storage.wibudev.com/api/files/${res.data.img}`) setLoading(false) } catch (error) { console.error(error); From 7ae49bc068a1938950177e6e116b405e39dddb89 Mon Sep 17 00:00:00 2001 From: amel Date: Thu, 12 Sep 2024 11:14:12 +0800 Subject: [PATCH 2/4] up d: api gambar --- src/module/calender/ui/create_user_calender.tsx | 4 ++-- src/module/calender/ui/create_user_detail_calender.tsx | 4 ++-- src/module/calender/ui/detail_event_division.tsx | 2 +- src/module/calender/ui/navbar_create_division_calender.tsx | 2 +- src/module/calender/ui/update_list_users.tsx | 4 ++-- src/module/discussion/ui/detail_discussion.tsx | 6 +++--- src/module/discussion/ui/form_create_discussion.tsx | 2 +- src/module/discussion/ui/form_edit_discussion.tsx | 2 +- src/module/discussion/ui/list_discussion.tsx | 2 +- src/module/division_new/ui/create_anggota_division.tsx | 4 ++-- src/module/division_new/ui/create_division.tsx | 2 +- src/module/division_new/ui/information_division.tsx | 2 +- src/module/division_new/ui/navbar_admin_division.tsx | 2 +- src/module/division_new/ui/navbar_create_users.tsx | 4 ++-- src/module/home/ui/view_search.tsx | 2 +- src/module/project/ui/add_member_detail_project.tsx | 4 ++-- src/module/project/ui/create_project.tsx | 2 +- src/module/project/ui/create_users_project.tsx | 4 ++-- src/module/project/ui/list_anggota_detail_project.tsx | 2 +- src/module/task/ui/add_member_detail_task.tsx | 4 ++-- src/module/task/ui/create_task.tsx | 2 +- src/module/task/ui/create_users_project.tsx | 4 ++-- src/module/task/ui/detail_list_anggota_task.tsx | 2 +- src/module/user/member/ui/edit_member.tsx | 2 +- src/module/user/member/ui/navbar_detail_member.tsx | 2 +- src/module/user/member/ui/tab_list_member.tsx | 2 +- src/module/user/profile/ui/edit_profile.tsx | 2 +- src/module/user/profile/ui/profile.tsx | 2 +- 28 files changed, 39 insertions(+), 39 deletions(-) diff --git a/src/module/calender/ui/create_user_calender.tsx b/src/module/calender/ui/create_user_calender.tsx index 2827daa..0c14fdb 100644 --- a/src/module/calender/ui/create_user_calender.tsx +++ b/src/module/calender/ui/create_user_calender.tsx @@ -182,7 +182,7 @@ export default function CreateUserCalender({ onClose }: { onClose: (val: any) => }> + }} src={`https://wibu-storage.wibudev.com/api/files/${v.img}`} alt="it's me" size="lg" /> {v.name} @@ -226,7 +226,7 @@ export default function CreateUserCalender({ onClose }: { onClose: (val: any) => xl: "xs" }}> - + diff --git a/src/module/calender/ui/create_user_detail_calender.tsx b/src/module/calender/ui/create_user_detail_calender.tsx index bee93d1..e2c0b72 100644 --- a/src/module/calender/ui/create_user_detail_calender.tsx +++ b/src/module/calender/ui/create_user_detail_calender.tsx @@ -195,7 +195,7 @@ export default function CreateUserDetailCalender() { }> + }} src={`https://wibu-storage.wibudev.com/api/files/${v.img}`} alt="it's me" size="lg" /> {v.name} @@ -240,7 +240,7 @@ export default function CreateUserDetailCalender() { xl: "xs" }}> - + diff --git a/src/module/calender/ui/detail_event_division.tsx b/src/module/calender/ui/detail_event_division.tsx index f270de3..1372c50 100644 --- a/src/module/calender/ui/detail_event_division.tsx +++ b/src/module/calender/ui/detail_event_division.tsx @@ -273,7 +273,7 @@ export default function DetailEventDivision() { base: 3, xl: 2 }}> - + - + vo }> + }} src={`https://wibu-storage.wibudev.com/api/files/${v.img}`} alt="it's me" size="lg" /> {v.name} @@ -227,7 +227,7 @@ export default function UpdateListUsers({ onClose }: { onClose: (val: any) => vo xl: "xs" }}> - + diff --git a/src/module/discussion/ui/detail_discussion.tsx b/src/module/discussion/ui/detail_discussion.tsx index 4215192..e8b53cf 100644 --- a/src/module/discussion/ui/detail_discussion.tsx +++ b/src/module/discussion/ui/detail_discussion.tsx @@ -131,7 +131,7 @@ export default function DetailDiscussion({ id, idDivision }: { id: string, idDiv > {isData?.username ? - + {isData?.username} @@ -165,7 +165,7 @@ export default function DetailDiscussion({ id, idDivision }: { id: string, idDiv - + - + diff --git a/src/module/discussion/ui/form_create_discussion.tsx b/src/module/discussion/ui/form_create_discussion.tsx index 3e12c85..7bc0b6c 100644 --- a/src/module/discussion/ui/form_create_discussion.tsx +++ b/src/module/discussion/ui/form_create_discussion.tsx @@ -27,7 +27,7 @@ export default function FormCreateDiscussion({ id }: { id: string }) { try { setLoading(true) const res = await funGetProfileByCookies() - setIMG(`/api/file/img?jenis=image&cat=user&file=${res.data.img}`) + setIMG(`https://wibu-storage.wibudev.com/api/files/${res.data.img}`) setLoading(false) } catch (error) { console.error(error); diff --git a/src/module/discussion/ui/form_edit_discussion.tsx b/src/module/discussion/ui/form_edit_discussion.tsx index b89332c..54f6bb2 100644 --- a/src/module/discussion/ui/form_edit_discussion.tsx +++ b/src/module/discussion/ui/form_edit_discussion.tsx @@ -61,7 +61,7 @@ export default function FormEditDiscussion() { try { setLoading(true) const res = await funGetProfileByCookies() - setIMG(`/api/file/img?jenis=image&cat=user&file=${res.data.img}`) + setIMG(`https://wibu-storage.wibudev.com/api/files/${res.data.img}`) setLoading(false) } catch (error) { console.error(error); diff --git a/src/module/discussion/ui/list_discussion.tsx b/src/module/discussion/ui/list_discussion.tsx index 2fa6904..fe16b89 100644 --- a/src/module/discussion/ui/list_discussion.tsx +++ b/src/module/discussion/ui/list_discussion.tsx @@ -105,7 +105,7 @@ export default function ListDiscussion({ id }: { id: string }) { router.push(`/division/${param.id}/discussion/${v.id}`) }}> - + }> + }} src={`https://wibu-storage.wibudev.com/api/files/${v.img}`} alt="it's me" size="lg" /> {v.name} @@ -195,7 +195,7 @@ export default function CreateAnggotaDivision() { (!found) ? handleFileClick(index) : null}> - + diff --git a/src/module/division_new/ui/create_division.tsx b/src/module/division_new/ui/create_division.tsx index 5abfcbd..41c4f73 100644 --- a/src/module/division_new/ui/create_division.tsx +++ b/src/module/division_new/ui/create_division.tsx @@ -195,7 +195,7 @@ export default function CreateDivision() { > - + - + - + }> + }} src={`https://wibu-storage.wibudev.com/api/files/${v.img}`} alt="it's me" size="lg" /> {v.name} @@ -184,7 +184,7 @@ export default function NavbarCreateUsers({ grup, onClose }: { grup?: string, on base: 3, xl: 2 }}> - + - + {_.startCase(v.name)} diff --git a/src/module/project/ui/add_member_detail_project.tsx b/src/module/project/ui/add_member_detail_project.tsx index 15ddde5..cdca1c7 100644 --- a/src/module/project/ui/add_member_detail_project.tsx +++ b/src/module/project/ui/add_member_detail_project.tsx @@ -188,7 +188,7 @@ export default function AddMemberDetailProject() { }> + }} src={`https://wibu-storage.wibudev.com/api/files/${v.img}`} alt="it's me" size="lg" /> {v.name} @@ -233,7 +233,7 @@ export default function AddMemberDetailProject() { base: 3, xl: 2 }}> - + - + }> + }} src={`https://wibu-storage.wibudev.com/api/files/${v.img}`} alt="it's me" size="lg" /> {v.name} @@ -187,7 +187,7 @@ export default function CreateUsersProject({ grup, onClose }: { grup?: string, o base: 3, xl: 2 }}> - + - + }> + }} src={`https://wibu-storage.wibudev.com/api/files/${v.img}`} alt="it's me" size="lg" /> {v.name} @@ -268,7 +268,7 @@ export default function AddMemberDetailTask() { base: 3, xl: 2 }}> - + - + }> + }} src={`https://wibu-storage.wibudev.com/api/files/${v.img}`} alt="it's me" size="lg" /> {v.name} @@ -248,7 +248,7 @@ export default function CreateUsersProject({ onClose }: { onClose: (val: any) => base: 3, xl: 2 }}> - + - +
- +
{loading ? <> diff --git a/src/module/user/member/ui/tab_list_member.tsx b/src/module/user/member/ui/tab_list_member.tsx index b66c399..98ad48d 100644 --- a/src/module/user/member/ui/tab_list_member.tsx +++ b/src/module/user/member/ui/tab_list_member.tsx @@ -92,7 +92,7 @@ export default function TabListMember() { xl: "xs" }} align="center"> - + {_.startCase(v.name)} diff --git a/src/module/user/profile/ui/edit_profile.tsx b/src/module/user/profile/ui/edit_profile.tsx index 7e7146f..0506206 100644 --- a/src/module/user/profile/ui/edit_profile.tsx +++ b/src/module/user/profile/ui/edit_profile.tsx @@ -1,5 +1,5 @@ "use client" -import { DIR, LayoutNavbarNew, WARNA } from "@/module/_global"; +import { LayoutNavbarNew, WARNA } from "@/module/_global"; import { Avatar, Box, Button, Flex, Indicator, Modal, rem, Select, Skeleton, Stack, Text, TextInput } from "@mantine/core"; import toast from "react-hot-toast"; import LayoutModal from "@/module/_global/layout/layout_modal"; diff --git a/src/module/user/profile/ui/profile.tsx b/src/module/user/profile/ui/profile.tsx index 94e76fa..121ad2a 100644 --- a/src/module/user/profile/ui/profile.tsx +++ b/src/module/user/profile/ui/profile.tsx @@ -1,5 +1,5 @@ "use client" -import { DIR, LayoutIconBack, LayoutNavbarHome, SkeletonDetailProfile, WARNA } from "@/module/_global"; +import { LayoutIconBack, LayoutNavbarHome, SkeletonDetailProfile, WARNA } from "@/module/_global"; import { ActionIcon, Avatar, Box, Grid, Group, Skeleton, Stack, Text } from "@mantine/core"; import { RiIdCardFill } from "react-icons/ri"; import { FaSquarePhone } from "react-icons/fa6"; From 047311c8b9105a4f6ed979eac6940669ade09bf8 Mon Sep 17 00:00:00 2001 From: amel Date: Thu, 12 Sep 2024 11:39:08 +0800 Subject: [PATCH 3/4] upd: upload image anggota --- src/app/api/user/[id]/route.ts | 17 ++++------- src/app/api/user/route.ts | 34 ++++++++------------- src/module/user/member/ui/create_member.tsx | 2 +- 3 files changed, 19 insertions(+), 34 deletions(-) diff --git a/src/app/api/user/[id]/route.ts b/src/app/api/user/[id]/route.ts index c80139f..7936848 100644 --- a/src/app/api/user/[id]/route.ts +++ b/src/app/api/user/[id]/route.ts @@ -1,7 +1,7 @@ -import { prisma } from "@/module/_global"; +import { DIR, funDeleteFile, funUploadFile, prisma } from "@/module/_global"; import { funGetUserByCookies } from "@/module/auth"; import { createLogUser } from "@/module/user"; -import _ from "lodash"; +import _, { update } from "lodash"; import { NextResponse } from "next/server"; import path from "path"; import fs from "fs"; @@ -203,22 +203,17 @@ export async function PUT(request: Request, context: { params: { id: string } }) }); if (String(file) != "undefined" && String(file) != "null") { - fs.unlink(`./public/image/user/${updates.img}`, (err) => { }) - const root = path.join(process.cwd(), "./public/image/user/"); const fExt = file.name.split(".").pop() const fileName = id + '.' + fExt; - const filePath = path.join(root, fileName); - - // Konversi ArrayBuffer ke Buffer - const buffer = Buffer.from(await file.arrayBuffer()); - fs.writeFileSync(filePath, buffer); - + const newFile = new File([file], fileName, { type: file.type }); + await funDeleteFile({ fileId: String(updates.img) }) + const upload = await funUploadFile({ file: newFile, dirId: DIR.user }) await prisma.user.update({ where: { id: id }, data: { - img: fileName + img: upload.data.id } }) } diff --git a/src/app/api/user/route.ts b/src/app/api/user/route.ts index fa7b506..ee9c44e 100644 --- a/src/app/api/user/route.ts +++ b/src/app/api/user/route.ts @@ -1,4 +1,4 @@ -import { funUploadFile, prisma } from "@/module/_global"; +import { DIR, funUploadFile, prisma } from "@/module/_global"; import { funGetUserByCookies } from "@/module/auth"; import { createLogUser } from "@/module/user"; import _ from "lodash"; @@ -141,27 +141,17 @@ export async function POST(request: Request) { const fExt = file.name.split(".").pop() const fileName = user.id + '.' + fExt; const newFile = new File([file], fileName, { type: file.type }); - await funUploadFile({ file: newFile, dirId: "cm0x8dbwn0005bp5tgmfcthzw" }) - - // const root = path.join(process.cwd(), "./public/image/user/"); - // const fExt = file.name.split(".").pop() - // const fileName = users.id + '.' + fExt; - // const filePath = path.join(root, fileName); - - // // Konversi ArrayBuffer ke Buffer - // const buffer = Buffer.from(await file.arrayBuffer()); - - // // Tulis file ke sistem - // fs.writeFileSync(filePath, buffer); - - // await prisma.user.update({ - // where: { - // id: users.id - // }, - // data: { - // img: fileName - // } - // }) + const upload = await funUploadFile({ file: newFile, dirId: DIR.user }) + if (upload.success) { + await prisma.user.update({ + where: { + id: users.id + }, + data: { + img: upload.data.id + } + }) + } } // create log user diff --git a/src/module/user/member/ui/create_member.tsx b/src/module/user/member/ui/create_member.tsx index 48873f3..3498b76 100644 --- a/src/module/user/member/ui/create_member.tsx +++ b/src/module/user/member/ui/create_member.tsx @@ -442,7 +442,7 @@ export default function CreateMember() { onBlur={() => setTouched({ ...touched, gender: true })} error={ touched.gender && ( - listData.gender == "" ? "Gender Tidak Boleh Kosong" : null + listData.gender == "" ? "Jenis Kelamin Tidak Boleh Kosong" : null ) } /> From 656f71ef2b1b75c330d9a99afab831c395821a13 Mon Sep 17 00:00:00 2001 From: amel Date: Thu, 12 Sep 2024 13:34:40 +0800 Subject: [PATCH 4/4] 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' /> );