From 76c2748fadff4e9a293a3073bbdf9785a862b783 Mon Sep 17 00:00:00 2001 From: Bagasbanuna02 Date: Wed, 1 Oct 2025 17:32:12 +0800 Subject: [PATCH] Invesment Add: - api/mobile/investment/[id]/document: handle data dokumen Fix: - api/mobile/investment/route.ts - api/mobile/investment/[id]/route.ts ### No Issue --- .../mobile/investment/[id]/document/route.ts | 131 ++++++++++++++++++ src/app/api/mobile/investment/[id]/route.ts | 85 +++++++++--- src/app/api/mobile/investment/route.ts | 96 ++++++++++++- 3 files changed, 291 insertions(+), 21 deletions(-) create mode 100644 src/app/api/mobile/investment/[id]/document/route.ts diff --git a/src/app/api/mobile/investment/[id]/document/route.ts b/src/app/api/mobile/investment/[id]/document/route.ts new file mode 100644 index 00000000..de15e1a8 --- /dev/null +++ b/src/app/api/mobile/investment/[id]/document/route.ts @@ -0,0 +1,131 @@ +import { NextResponse } from "next/server"; +import { prisma } from "@/lib"; + +export { POST, GET, DELETE }; + +async function POST(request: Request, { params }: { params: { id: string } }) { + const { id } = params; + const { data } = await request.json(); + console.log("[POST DOCUMENT ID]", id); + console.log("[POST DOCUMENT DATA]", data); + + try { + const create = await prisma.dokumenInvestasi.upsert({ + where: { + id: id, + }, + create: { + investasiId: id, + title: data.title, + fileId: data.fileId, + }, + update: { + title: data.title, + fileId: data.fileId, + }, + }); + + if (!create) + return NextResponse.json({ + status: 201, + success: true, + message: "Berhasil Menambahkan Dokumen", + }); + + return NextResponse.json({ + status: 201, + success: true, + message: "Berhasil Menambahkan Dokumen", + }); + } catch (error) { + console.error(error); + return NextResponse.json({ + status: 500, + success: false, + message: "Error Menambahkan Dokumen", + reason: (error as Error).message, + }); + } +} + +async function GET(request: Request, { params }: { params: { id: string } }) { + const { id } = params; + const { searchParams } = new URL(request.url); + const category = searchParams.get("category"); + + try { + let fixData; + + if (category === "one-document") { + fixData = await prisma.dokumenInvestasi.findUnique({ + where: { + id: id, + }, + }); + } else if (category == "all-document") { + fixData = await prisma.dokumenInvestasi.findMany({ + orderBy: { + updatedAt: "desc", + }, + where: { + investasiId: id, + active: true, + }, + }); + } + + return NextResponse.json({ + status: 200, + success: true, + message: "Berhasil Mendapatkan Data", + data: fixData, + }); + } catch (error) { + console.error(error); + return NextResponse.json({ + status: 500, + success: false, + message: "Error Mendapatkan Data", + reason: (error as Error).message, + }); + } +} + +async function DELETE( + request: Request, + { params }: { params: { id: string } } +) { + const { id } = params; + + try { + const deleteData = await prisma.dokumenInvestasi.delete({ + where: { + id: id, + }, + }); + + const deleteFile = await fetch( + `https://wibu-storage.wibudev.com/api/files/${deleteData.fileId}/delete`, + { + method: "DELETE", + headers: { + Authorization: `Bearer ${process.env.WS_APIKEY}`, + }, + } + ); + + return NextResponse.json({ + status: 200, + success: true, + message: "Berhasil Menghapus Dokumen", + }); + } catch (error) { + console.error(error); + return NextResponse.json({ + status: 500, + success: false, + message: "Error Menghapus Dokumen", + reason: (error as Error).message, + }); + } +} diff --git a/src/app/api/mobile/investment/[id]/route.ts b/src/app/api/mobile/investment/[id]/route.ts index 73d2e853..0aa550dd 100644 --- a/src/app/api/mobile/investment/[id]/route.ts +++ b/src/app/api/mobile/investment/[id]/route.ts @@ -1,7 +1,7 @@ -import { NextResponse } from "next/server"; import prisma from "@/lib/prisma"; +import { NextResponse } from "next/server"; -export { GET, DELETE, PUT }; +export { DELETE, GET, PUT }; async function GET(request: Request, { params }: { params: { id: string } }) { const { id } = params; @@ -52,19 +52,70 @@ async function DELETE( const { id } = params; try { - // const checkData = await prisma.investasi.findUnique({ - // where: { - // id: id, - // }, - // }); + const checkData = await prisma.investasi.findUnique({ + where: { + id: id, + }, + select: { + imageId: true, + prospektusFileId: true, + DokumenInvestasi: true, + }, + }); - // if (!checkData) { - // return NextResponse.json({ - // status: 404, - // success: false, - // message: "Data tidak ditemukan", - // }); - // } + if (!checkData) { + return NextResponse.json({ + status: 404, + success: false, + message: "Data tidak ditemukan", + }); + } + + const listDocument = checkData.DokumenInvestasi; + + for (let i of listDocument) { + const deleteFile = await fetch( + `https://wibu-storage.wibudev.com/api/files/${i.fileId}/delete`, + { + method: "DELETE", + headers: { + Authorization: `Bearer ${process.env.WS_APIKEY}`, + }, + } + ); + + if (!deleteFile.ok) { + console.log("[DELETE FILE]", deleteFile); + } + + const delDocument = await prisma.dokumenInvestasi.delete({ + where: { + id: i.id, + }, + }); + + console.log("[DELETE DOCUMENT]", delDocument); + } + + const delImage = await fetch( + `https://wibu-storage.wibudev.com/api/files/${checkData.imageId}/delete`, + { + method: "DELETE", + headers: { + Authorization: `Bearer ${process.env.WS_APIKEY}`, + }, + } + ); + + const delProspektus = await fetch( + `https://wibu-storage.wibudev.com/api/files/${checkData.prospektusFileId}/delete`, + { + method: "DELETE", + headers: { + Authorization: `Bearer ${process.env.WS_APIKEY}`, + }, + } + ); const data = await prisma.investasi.delete({ where: { @@ -72,16 +123,10 @@ async function DELETE( }, }); - const fixData = { - imageId: data.imageId, - prospektusFileId: data.prospektusFileId, - }; - return NextResponse.json({ status: 200, success: true, message: "Berhasil Menghapus Data", - data: fixData, }); } catch (error) { return NextResponse.json({ diff --git a/src/app/api/mobile/investment/route.ts b/src/app/api/mobile/investment/route.ts index 85d4ea12..1970c724 100644 --- a/src/app/api/mobile/investment/route.ts +++ b/src/app/api/mobile/investment/route.ts @@ -1,8 +1,9 @@ import _ from "lodash"; import { NextResponse } from "next/server"; import prisma from "@/lib/prisma"; +import moment from "moment"; -export { POST }; +export { POST, GET }; async function POST(request: Request) { const { data } = await request.json(); console.log(["DATA INVESTASI"], data); @@ -44,3 +45,96 @@ async function POST(request: Request) { } } +async function GET(request: Request) { + let fixData; + const { searchParams } = new URL(request.url); + + try { + const data = await prisma.investasi.findMany({ + where: { + masterStatusInvestasiId: "1", + masterProgresInvestasiId: "1", + }, + select: { + id: true, + MasterPencarianInvestor: true, + countDown: true, + progress: true, + }, + }); + + for (let a of data) { + if ( + (a.MasterPencarianInvestor?.name as any) - + moment(new Date()).diff(new Date(a.countDown as any), "days") <= + 0 + ) { + await prisma.investasi.update({ + where: { + id: a.id, + }, + data: { + masterProgresInvestasiId: "3", + }, + }); + } + + if (a.progress === "100") { + await prisma.investasi.update({ + where: { + id: a.id, + }, + data: { + masterProgresInvestasiId: "2", + }, + }); + } + } + + const dataAwal = await prisma.investasi.findMany({ + orderBy: [ + { + masterProgresInvestasiId: "asc", + }, + { + countDown: "desc", + }, + ], + where: { + masterStatusInvestasiId: "1", + }, + select: { + id: true, + imageId: true, + title: true, + progress: true, + countDown: true, + MasterPencarianInvestor: { + select: { + name: true, + }, + }, + }, + }); + + fixData = dataAwal.map((v: any) => ({ + ..._.omit(v, ["MasterPencarianInvestor"]), + pencarianInvestor: v.MasterPencarianInvestor.name, + })); + + return NextResponse.json({ + status: 200, + success: true, + message: "Berhasil Mendapatkan Data", + data: fixData, + }); + } catch (error) { + console.log("[ERROR GET INVESTASI]", error); + return NextResponse.json({ + status: 500, + success: false, + message: "Error Mendapatkan Data", + reason: error || (error as Error).message, + }); + } +}