236 lines
6.3 KiB
TypeScript
236 lines
6.3 KiB
TypeScript
import { NextResponse } from "next/server";
|
|
import { prisma } from "@/lib";
|
|
import { sendNotificationMobileToOneUser } from "@/lib/mobile/notification/send-notification";
|
|
import {
|
|
NotificationMobileBodyType,
|
|
NotificationMobileTitleType,
|
|
} from "../../../../../../../../types/type-mobile-notification";
|
|
import { routeUserMobile } from "@/lib/mobile/route-page-mobile";
|
|
|
|
export { GET, PUT };
|
|
|
|
async function GET(req: Request, { params }: { params: { id: string } }) {
|
|
const { id } = params;
|
|
|
|
try {
|
|
const data = await prisma.investasi_Invoice.findUnique({
|
|
where: {
|
|
id: id,
|
|
},
|
|
select: {
|
|
id: true,
|
|
investasiId: true,
|
|
nominal: true,
|
|
createdAt: true,
|
|
Author: true,
|
|
StatusInvoice: true,
|
|
imageId: true,
|
|
MasterBank: true,
|
|
lembarTerbeli: true,
|
|
},
|
|
});
|
|
|
|
return NextResponse.json(
|
|
{
|
|
success: true,
|
|
message: "Berhasil mendapatkan data",
|
|
data: data,
|
|
},
|
|
{ status: 200 }
|
|
);
|
|
} catch (error) {
|
|
console.log("[ERROR]", error);
|
|
return NextResponse.json(
|
|
{
|
|
success: false,
|
|
message: "Error get detail Investasi",
|
|
reason: (error as Error).message,
|
|
},
|
|
{ status: 500 }
|
|
);
|
|
}
|
|
}
|
|
|
|
async function PUT(req: Request, { params }: { params: { id: string } }) {
|
|
const { id } = params;
|
|
const { data } = await req.json();
|
|
const { searchParams } = new URL(req.url);
|
|
const category = searchParams.get("category");
|
|
|
|
console.log("[ID]", id);
|
|
console.log("[DATA]", data);
|
|
console.log("[CATEGORY]", category);
|
|
|
|
let fixData;
|
|
try {
|
|
if (category === "deny") {
|
|
const updt = await prisma.investasi_Invoice.update({
|
|
where: {
|
|
id: id,
|
|
},
|
|
data: {
|
|
statusInvoiceId: "4",
|
|
},
|
|
select: {
|
|
Investasi: {
|
|
select: {
|
|
title: true,
|
|
},
|
|
},
|
|
authorId: true,
|
|
},
|
|
});
|
|
|
|
// SEND NOTIFICAtION
|
|
await sendNotificationMobileToOneUser({
|
|
recipientId: updt?.authorId as string,
|
|
senderId: data?.senderId || "",
|
|
payload: {
|
|
title: "Transaksi Tertolak" as NotificationMobileTitleType,
|
|
body: `Maaf transaksi kamu telah ditolak ! ${updt?.Investasi?.title}` as NotificationMobileBodyType,
|
|
type: "announcement",
|
|
kategoriApp: "INVESTASI",
|
|
deepLink: routeUserMobile.investmentTransaction,
|
|
},
|
|
});
|
|
|
|
fixData = updt;
|
|
} else if (category === "accept") {
|
|
const findInvestasi = await prisma.investasi.findFirst({
|
|
where: {
|
|
id: data.investasiId,
|
|
},
|
|
select: {
|
|
id: true,
|
|
title: true,
|
|
authorId: true,
|
|
totalLembar: true,
|
|
sisaLembar: true,
|
|
lembarTerbeli: true,
|
|
},
|
|
});
|
|
|
|
// Hitung TOTAL SISA LEMBAR
|
|
const investasi_sisaLembar = Number(findInvestasi?.sisaLembar);
|
|
const invoice_lembarTerbeli = Number(data.lembarTerbeli);
|
|
const resultSisaLembar = investasi_sisaLembar - invoice_lembarTerbeli;
|
|
|
|
// TAMBAH LEMBAR TERBELI
|
|
const investasi_lembarTerbeli = Number(findInvestasi?.lembarTerbeli);
|
|
const resultLembarTerbeli =
|
|
investasi_lembarTerbeli + invoice_lembarTerbeli;
|
|
|
|
// Progress
|
|
const investasi_totalLembar = Number(findInvestasi?.totalLembar);
|
|
const progress = (resultLembarTerbeli / investasi_totalLembar) * 100;
|
|
const resultProgres = Number(progress).toFixed(2);
|
|
|
|
const updateInvoice = await prisma.investasi_Invoice.update({
|
|
where: {
|
|
id: id,
|
|
},
|
|
data: {
|
|
statusInvoiceId: "1",
|
|
},
|
|
select: {
|
|
authorId: true,
|
|
},
|
|
});
|
|
|
|
if (!updateInvoice) {
|
|
return NextResponse.json(
|
|
{
|
|
success: false,
|
|
message: "Gagal Update Status",
|
|
reason: "Update status failed",
|
|
},
|
|
{ status: 500 }
|
|
);
|
|
}
|
|
|
|
const updateInvestasi = await prisma.investasi.update({
|
|
where: {
|
|
id: data.investasiId,
|
|
},
|
|
data: {
|
|
sisaLembar: resultSisaLembar.toString(),
|
|
lembarTerbeli: resultLembarTerbeli.toString(),
|
|
progress: resultProgres,
|
|
},
|
|
include: {
|
|
MasterStatusInvestasi: true,
|
|
},
|
|
});
|
|
|
|
if (!updateInvestasi) {
|
|
return NextResponse.json(
|
|
{
|
|
success: false,
|
|
message: "Gagal Update Data Investasi",
|
|
reason: "Update data investasi failed",
|
|
},
|
|
{ status: 500 }
|
|
);
|
|
}
|
|
|
|
// SEND NOTIFICATION: to investor
|
|
await sendNotificationMobileToOneUser({
|
|
recipientId: updateInvoice?.authorId as string,
|
|
senderId: data?.senderId || "",
|
|
payload: {
|
|
title: "Transaksi Berhasil" as NotificationMobileTitleType,
|
|
body: `Selamat anda menjadi investor pada investasi ${findInvestasi?.title}` as NotificationMobileBodyType,
|
|
type: "announcement",
|
|
kategoriApp: "INVESTASI",
|
|
deepLink: routeUserMobile.investmentTransaction,
|
|
},
|
|
});
|
|
|
|
// SEND NOTIFICATION: to creator
|
|
await sendNotificationMobileToOneUser({
|
|
recipientId: findInvestasi?.authorId as any,
|
|
senderId: data?.senderId || "",
|
|
payload: {
|
|
title: "Ada Investor Baru !" as NotificationMobileTitleType,
|
|
body: `Cek daftar investor pada ${findInvestasi?.title}` as NotificationMobileBodyType,
|
|
type: "announcement",
|
|
kategoriApp: "INVESTASI",
|
|
deepLink: routeUserMobile.investmentDetailPublish({
|
|
id: findInvestasi?.id as string,
|
|
}),
|
|
},
|
|
});
|
|
|
|
fixData = updateInvoice;
|
|
} else {
|
|
return NextResponse.json(
|
|
{
|
|
success: false,
|
|
message: "Invalid category",
|
|
reason: "Invalid category",
|
|
},
|
|
{ status: 400 }
|
|
);
|
|
}
|
|
|
|
return NextResponse.json(
|
|
{
|
|
success: true,
|
|
message: "Berhasil update data",
|
|
data: fixData,
|
|
},
|
|
{ status: 200 }
|
|
);
|
|
} catch (error) {
|
|
console.log("[ERROR]", error);
|
|
return NextResponse.json(
|
|
{
|
|
success: false,
|
|
message: "Error update detail Investasi",
|
|
reason: (error as Error).message,
|
|
},
|
|
{ status: 500 }
|
|
);
|
|
}
|
|
}
|