From f7db89da212fa1e1b020e56bf1d03bceb2af8ddc Mon Sep 17 00:00:00 2001 From: Bagasbanuna02 Date: Tue, 11 Feb 2025 17:33:27 +0800 Subject: [PATCH] fix portofolio deskripsiL: - fix server acton create to API --- push-staging.wibu | 3 - run.dev | 1 + src/app/api/map/[id]/route.ts | 74 ++++++++++++++ src/app/api/master/bidang-bisnis/route.ts | 7 -- src/app/api/portofolio/[id]/route.ts | 56 ++++++++--- src/app/dev/map/create/[id]/page.tsx | 5 +- src/app/dev/portofolio/create/[id]/page.tsx | 7 +- .../component/api_fetch_portofolio.ts | 4 +- .../button/comp_button_selanjutnya.tsx | 91 +++++++++--------- .../map/_component/api_fetch_map.ts | 25 +++++ .../button/comp_button_save_pin.tsx | 96 +++++++++++++------ src/app_modules/map/ui/ui_create_pin.tsx | 25 ++--- src/app_modules/map/view/create.tsx | 20 ++-- 13 files changed, 271 insertions(+), 143 deletions(-) delete mode 100644 push-staging.wibu create mode 100644 run.dev create mode 100644 src/app/api/map/[id]/route.ts create mode 100644 src/app_modules/map/_component/api_fetch_map.ts diff --git a/push-staging.wibu b/push-staging.wibu deleted file mode 100644 index dd700a4b..00000000 --- a/push-staging.wibu +++ /dev/null @@ -1,3 +0,0 @@ -git add -A -git commit -m "data auto" -git push origin bagas/10-feb-25 diff --git a/run.dev b/run.dev new file mode 100644 index 00000000..b75a60b1 --- /dev/null +++ b/run.dev @@ -0,0 +1 @@ +bun --env-file=.env run dev \ No newline at end of file diff --git a/src/app/api/map/[id]/route.ts b/src/app/api/map/[id]/route.ts new file mode 100644 index 00000000..0bb546a0 --- /dev/null +++ b/src/app/api/map/[id]/route.ts @@ -0,0 +1,74 @@ +import { prisma } from "@/app/lib"; +import { funGetUserIdByToken } from "@/app_modules/_global/fun/get"; +import backendLogger from "@/util/backendLogger"; +import { NextResponse } from "next/server"; + +export { POST }; + +async function POST(request: Request, { params }: { params: { id: string } }) { + if (request.method !== "POST") { + return NextResponse.json( + { + success: false, + message: "Method not allowed", + }, + { status: 405 } + ); + } + + try { + const userLoginId = await funGetUserIdByToken(); + if (!userLoginId) { + return NextResponse.json( + { + success: false, + message: "User tidak ditemukan", + }, + { status: 401 } + ); + } + + const { id } = params; + const { data } = await request.json(); + + const created = await prisma.businessMaps.create({ + data: { + latitude: data.latitude, + longitude: data.longitude, + namePin: data.namePin, + imageId: data.imageId, + portofolioId: id, + authorId: userLoginId, + }, + }); + + if (!created) { + return NextResponse.json( + { + success: false, + message: "Gagal membuat pin map", + }, + { status: 400 } + ); + } + + return NextResponse.json( + { + success: true, + message: "Berhasil membuat portofolio", + data: created, + }, + { status: 201 } + ); + } catch (error) { + backendLogger.error("Error create pin map", error); + return NextResponse.json( + { + success: false, + message: "Gagal membuat pin map", + reason: (error as Error).message, + }, + { status: 500 } + ); + } +} diff --git a/src/app/api/master/bidang-bisnis/route.ts b/src/app/api/master/bidang-bisnis/route.ts index aa73de99..9d1986cb 100644 --- a/src/app/api/master/bidang-bisnis/route.ts +++ b/src/app/api/master/bidang-bisnis/route.ts @@ -1,15 +1,8 @@ import { prisma } from "@/app/lib"; import backendLogger from "@/util/backendLogger"; -import { clientLogger } from "@/util/clientLogger"; import { NextResponse } from "next/server"; export async function GET(request: Request) { - if (request.method !== "GET") { - return NextResponse.json( - { success: false, message: "Method not allowed" }, - { status: 405 } - ); - } try { let fixData; diff --git a/src/app/api/portofolio/[id]/route.ts b/src/app/api/portofolio/[id]/route.ts index deea8fd8..62409ff3 100644 --- a/src/app/api/portofolio/[id]/route.ts +++ b/src/app/api/portofolio/[id]/route.ts @@ -18,25 +18,53 @@ async function POST(request: Request, { params }: { params: { id: string } }) { const { id } = params; const { data } = await request.json(); - // const createPortofolio = await prisma.portofolio.create({ - // data: { - // profileId: id, - // id_Portofolio: "Porto" + Date.now().toString(), - // namaBisnis: data.namaBisnis, - // deskripsi: data.deskripsi, - // tlpn: data.tlpn, - // alamatKantor: data.alamatKantor, - // masterBidangBisnisId: data.masterBidangBisnisId, - // logoId: data.fileId, - // }, - // }); + const createPortofolio = await prisma.portofolio.create({ + data: { + profileId: id, + id_Portofolio: "Porto" + Date.now().toString(), + namaBisnis: data.namaBisnis, + deskripsi: data.deskripsi, + tlpn: data.tlpn, + alamatKantor: data.alamatKantor, + masterBidangBisnisId: data.masterBidangBisnisId, + logoId: data.fileId, + }, + }); + + if (!createPortofolio) + return NextResponse.json( + { + success: false, + message: "Gagal membuat portofolio", + }, + { status: 400 } + ); + + const createMedsos = await prisma.portofolio_MediaSosial.create({ + data: { + portofolioId: createPortofolio.id, + facebook: data?.facebook, + instagram: data?.instagram, + tiktok: data?.tiktok, + twitter: data?.twitter, + youtube: data?.youtube, + }, + }); + + if (!createMedsos) + return NextResponse.json( + { + success: false, + message: "Gagal menambahkan medsos", + }, + { status: 400 } + ); return NextResponse.json( { success: true, message: "Berhasil mendapatkan data", - id, - data, + data: createPortofolio, }, { status: 200 } ); diff --git a/src/app/dev/map/create/[id]/page.tsx b/src/app/dev/map/create/[id]/page.tsx index 320e0b54..2841a5d2 100644 --- a/src/app/dev/map/create/[id]/page.tsx +++ b/src/app/dev/map/create/[id]/page.tsx @@ -1,10 +1,9 @@ import { Map_CreateNewPin } from "@/app_modules/map/view"; -export default async function Page({ params }: { params: { id: string } }) { - let portofolioId = params.id; +export default async function Page() { return ( <> - + ); } diff --git a/src/app/dev/portofolio/create/[id]/page.tsx b/src/app/dev/portofolio/create/[id]/page.tsx index fcc6bef3..3cd64728 100644 --- a/src/app/dev/portofolio/create/[id]/page.tsx +++ b/src/app/dev/portofolio/create/[id]/page.tsx @@ -1,14 +1,9 @@ import { CreatePortofolio } from "@/app_modules/katalog/portofolio"; -import { Portofolio_getMasterBidangBisnis } from "@/app_modules/katalog/portofolio/fun/master/get_bidang_bisnis"; export default async function Page() { - // const profileId = params.id; - // const bidangBisnis = await Portofolio_getMasterBidangBisnis(); - return ( <> - + ); } diff --git a/src/app_modules/katalog/portofolio/component/api_fetch_portofolio.ts b/src/app_modules/katalog/portofolio/component/api_fetch_portofolio.ts index 398ea490..14f8f677 100644 --- a/src/app_modules/katalog/portofolio/component/api_fetch_portofolio.ts +++ b/src/app_modules/katalog/portofolio/component/api_fetch_portofolio.ts @@ -2,11 +2,11 @@ export { apiCreatePortofolio, }; -const apiCreatePortofolio = async ({ data }: { data: any }) => { +const apiCreatePortofolio = async ({ profileId, data }: { profileId: string, data: any }) => { const { token } = await fetch("/api/get-cookie").then((res) => res.json()); if (!token) return await token.json().catch(() => null); - const res = await fetch(`/api/portofolio`, { + const res = await fetch(`/api/portofolio/${profileId}`, { method: "POST", body: JSON.stringify({ data }), headers: { diff --git a/src/app_modules/katalog/portofolio/component/button/comp_button_selanjutnya.tsx b/src/app_modules/katalog/portofolio/component/button/comp_button_selanjutnya.tsx index 38c6034f..3e784300 100644 --- a/src/app_modules/katalog/portofolio/component/button/comp_button_selanjutnya.tsx +++ b/src/app_modules/katalog/portofolio/component/button/comp_button_selanjutnya.tsx @@ -14,7 +14,6 @@ import { funGlobal_UploadToStorage } from "@/app_modules/_global/fun"; import { clientLogger } from "@/util/clientLogger"; import { useRouter } from "next/navigation"; import { useState } from "react"; -import funCreatePortofolio from "../../fun/fun_create_portofolio"; import { apiCreatePortofolio } from "../api_fetch_portofolio"; interface ICreatePortofolio { @@ -45,17 +44,52 @@ export function Portofolio_ComponentButtonSelanjutnya({ const router = useRouter(); const [loading, setLoading] = useState(false); - async function onSubmit() { - if (_.values(dataPortofolio).includes("")) { + const validateData = () => { + if (_.includes(_.values(dataPortofolio), "")) { ComponentGlobal_NotifikasiPeringatan("Lengkapi Data"); - return; + return false; } if (dataPortofolio.tlpn.length < 10) { ComponentGlobal_NotifikasiPeringatan("Nomor telepon minimal 10 angka"); - return; + return false; } + return true; + }; + + const handleCreatePortofolio = async (fileId: string) => { + const newData: ICreatePortofolio = { + namaBisnis: dataPortofolio.namaBisnis, + masterBidangBisnisId: dataPortofolio.masterBidangBisnisId, + alamatKantor: dataPortofolio.alamatKantor, + tlpn: dataPortofolio.tlpn, + deskripsi: dataPortofolio.deskripsi, + facebook: dataMedsos.facebook, + twitter: dataMedsos.twitter, + instagram: dataMedsos.instagram, + tiktok: dataMedsos.tiktok, + youtube: dataMedsos.youtube, + fileId: fileId, + }; + + const response = await apiCreatePortofolio({ + profileId: profileId, + data: newData, + }); + + if (response.success) { + ComponentGlobal_NotifikasiBerhasil("Berhasil disimpan"); + router.replace(RouterMap.create + response.data.id, { scroll: false }); + } else { + setLoading(false); + throw new Error("Failed to create portfolio"); + } + }; + + const onSubmit = async () => { + if (!validateData()) return; + try { setLoading(true); @@ -65,59 +99,22 @@ export function Portofolio_ComponentButtonSelanjutnya({ }); if (!uploadFile.success) { - setLoading(false); ComponentGlobal_NotifikasiPeringatan("Gagal upload gambar"); return; } - const fileId = uploadFile.data.id; - - const newData: ICreatePortofolio = { - namaBisnis: dataPortofolio.namaBisnis, - masterBidangBisnisId: dataPortofolio.masterBidangBisnisId, - alamatKantor: dataPortofolio.alamatKantor, - tlpn: dataPortofolio.tlpn, - deskripsi: dataPortofolio.deskripsi, - facebook: dataMedsos.facebook, - twitter: dataMedsos.twitter, - instagram: dataMedsos.instagram, - tiktok: dataMedsos.tiktok, - youtube: dataMedsos.youtube, - fileId: fileId, - }; - - // const responeCreated = await apiCreatePortofolio({ - // data: newData, - // }); - - // if (responeCreated.success) { - // ComponentGlobal_NotifikasiBerhasil("Berhasil disimpan"); - // router.replace(RouterMap.create + responeCreated.id, { scroll: false }); - // } - - - const res = await funCreatePortofolio({ - profileId: profileId, - data: dataPortofolio as any, - medsos: dataMedsos, - fileId: fileId, - }); - if (res.status === 201) { - ComponentGlobal_NotifikasiBerhasil("Berhasil disimpan"); - router.replace(RouterMap.create + res.id, { scroll: false }); - } else { - setLoading(false); - ComponentGlobal_NotifikasiGagal("Gagal disimpan"); - } + await handleCreatePortofolio(uploadFile.data.id); } catch (error) { setLoading(false); + ComponentGlobal_NotifikasiGagal("Gagal disimpan"); clientLogger.error("Error create portofolio", error); } - } + }; + return ( <>