diff --git a/src/app/api/mobile/admin/investment/[id]/invoice/route.ts b/src/app/api/mobile/admin/investment/[id]/invoice/route.ts index e8a95cc2..3018a513 100644 --- a/src/app/api/mobile/admin/investment/[id]/invoice/route.ts +++ b/src/app/api/mobile/admin/investment/[id]/invoice/route.ts @@ -1,5 +1,11 @@ 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 }; @@ -65,19 +71,39 @@ async function PUT(req: Request, { params }: { params: { id: string } }) { data: { statusInvoiceId: "4", }, - // select: { - // StatusInvoice: true, - // authorId: true, - // }, + 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.investasiTransaction, + }, }); fixData = updt; } else if (category === "accept") { - const dataInvestasi: any = await prisma.investasi.findFirst({ + const findInvestasi = await prisma.investasi.findFirst({ where: { id: data.investasiId, }, select: { + id: true, + title: true, + authorId: true, totalLembar: true, sisaLembar: true, lembarTerbeli: true, @@ -85,30 +111,33 @@ async function PUT(req: Request, { params }: { params: { id: string } }) { }); // Hitung TOTAL SISA LEMBAR - const investasi_sisaLembar = Number(dataInvestasi?.sisaLembar); + 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(dataInvestasi?.lembarTerbeli); + const investasi_lembarTerbeli = Number(findInvestasi?.lembarTerbeli); const resultLembarTerbeli = investasi_lembarTerbeli + invoice_lembarTerbeli; // Progress - const investasi_totalLembar = Number(dataInvestasi?.totalLembar); + const investasi_totalLembar = Number(findInvestasi?.totalLembar); const progress = (resultLembarTerbeli / investasi_totalLembar) * 100; const resultProgres = Number(progress).toFixed(2); - const updt = await prisma.investasi_Invoice.update({ + const updateInvoice = await prisma.investasi_Invoice.update({ where: { id: id, }, data: { statusInvoiceId: "1", }, + select: { + authorId: true, + }, }); - if (!updt) { + if (!updateInvoice) { return NextResponse.json( { success: false, @@ -144,7 +173,35 @@ async function PUT(req: Request, { params }: { params: { id: string } }) { ); } - fixData = updt; + // 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.investasiTransaction, + }, + }); + + // 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.investasiDetailPublish({ + id: findInvestasi?.id as string, + }), + }, + }); + + fixData = updateInvoice; } else { return NextResponse.json( { diff --git a/src/app/api/mobile/admin/investment/[id]/route.ts b/src/app/api/mobile/admin/investment/[id]/route.ts index 2b28cc11..3d5913bb 100644 --- a/src/app/api/mobile/admin/investment/[id]/route.ts +++ b/src/app/api/mobile/admin/investment/[id]/route.ts @@ -128,7 +128,7 @@ async function PUT(request: Request, { params }: { params: { id: string } }) { body: "Mohon perbaiki data sesuai catatan penolakan !", type: "announcement", kategoriApp: "INVESTASI", - deepLink: routeUserMobile.investmentByStatus({ status: "reject" }), + deepLink: routeUserMobile.investmentPortofolioByStatus({ status: "reject" }), }, }); @@ -151,12 +151,10 @@ async function PUT(request: Request, { params }: { params: { id: string } }) { senderId: senderId, payload: { title: "Review Selesai", - body: ` - Investasi kamu telah dipublikasikan !\n - ${updatedData.title}` as NotificationMobileBodyType, + body: `Investasi kamu telah dipublikasikan ! ${updatedData.title}` as NotificationMobileBodyType, type: "announcement", kategoriApp: "INVESTASI", - deepLink: routeUserMobile.investmentByStatus({ status: "publish" }), + deepLink: routeUserMobile.investmentPortofolioByStatus({ status: "publish" }), }, }); diff --git a/src/app/api/mobile/investment/[id]/document/route.ts b/src/app/api/mobile/investment/[id]/document/route.ts index de15e1a8..684a40fe 100644 --- a/src/app/api/mobile/investment/[id]/document/route.ts +++ b/src/app/api/mobile/investment/[id]/document/route.ts @@ -1,5 +1,10 @@ import { NextResponse } from "next/server"; import { prisma } from "@/lib"; +import { sendNotificationMobileToManyUser } from "@/lib/mobile/notification/send-notification"; +import { + NotificationMobileBodyType, + NotificationMobileTitleType, +} from "../../../../../../../types/type-mobile-notification"; export { POST, GET, DELETE }; @@ -10,7 +15,7 @@ async function POST(request: Request, { params }: { params: { id: string } }) { console.log("[POST DOCUMENT DATA]", data); try { - const create = await prisma.dokumenInvestasi.upsert({ + const createdDocs = await prisma.dokumenInvestasi.upsert({ where: { id: id, }, @@ -23,9 +28,42 @@ async function POST(request: Request, { params }: { params: { id: string } }) { title: data.title, fileId: data.fileId, }, + select: { + investasiId: true, + investasi: { + select: { + title: true, + }, + }, + }, }); - if (!create) + const findInvestor = await prisma.investasi_Invoice.findMany({ + where: { + investasiId: id, + StatusInvoice: { + name: "Berhasil", + }, + }, + }); + + // SEND NOTIFICATION + // await sendNotificationMobileToManyUser({ + // recipientIds: findInvestor.map((user) => user.id), + // senderId: data.authorId, + // payload: { + // title: "Cek Dokumen" as NotificationMobileTitleType, + // body: `Ada informasi dokumen yang di\\\ ${createdDocs.investasi?.title}` as NotificationMobileBodyType, + // type: "announcement", + // kategoriApp: "INVESTASI", + // deepLink: routeAdminMobile.investmentDetailPublish({ + // id: update.investasiId as string, + // status: "publish", + // }), + // }, + // }); + + if (!createdDocs) return NextResponse.json({ status: 201, success: true, @@ -93,7 +131,7 @@ async function GET(request: Request, { params }: { params: { id: string } }) { async function DELETE( request: Request, - { params }: { params: { id: string } } + { params }: { params: { id: string } }, ) { const { id } = params; @@ -111,9 +149,9 @@ async function DELETE( headers: { Authorization: `Bearer ${process.env.WS_APIKEY}`, }, - } + }, ); - + return NextResponse.json({ status: 200, success: true, diff --git a/src/app/api/mobile/investment/[id]/invoice/route.ts b/src/app/api/mobile/investment/[id]/invoice/route.ts index c8b9c027..a29f723d 100644 --- a/src/app/api/mobile/investment/[id]/invoice/route.ts +++ b/src/app/api/mobile/investment/[id]/invoice/route.ts @@ -204,8 +204,8 @@ async function PUT(request: Request, { params }: { params: { id: string } }) { imageId: data.imageId, }, select: { - investasiId: true - } + investasiId: true, + }, }); if (fixStatus === "Proses") { @@ -229,6 +229,7 @@ async function PUT(request: Request, { params }: { params: { id: string } }) { select: { id: true }, }); + // SEND NOTIFICATION await sendNotificationMobileToManyUser({ recipientIds: findUsers.map((user) => user.id), senderId: data.authorId, @@ -237,7 +238,10 @@ async function PUT(request: Request, { params }: { params: { id: string } }) { body: `Cek data investor pada ${findInvestasi?.title}` as NotificationMobileBodyType, type: "announcement", kategoriApp: "INVESTASI", - deepLink: routeAdminMobile.investmentByStatus({ status: "publish" }), + deepLink: routeAdminMobile.investmentDetailPublish({ + id: update.investasiId as string, + status: "publish", + }), }, }); } diff --git a/src/lib/mobile/route-page-mobile.ts b/src/lib/mobile/route-page-mobile.ts index a467fd77..1679f2c9 100644 --- a/src/lib/mobile/route-page-mobile.ts +++ b/src/lib/mobile/route-page-mobile.ts @@ -21,8 +21,14 @@ const routeAdminMobile = { forumPreviewReportComment: `/admin/forum/report-comment`, // INVESTMENT - investmentByStatus: ({ status }: { status: StatusApp }) => - `/admin/investment/${status}/status`, + investmentByStatus: ({ status }: { status: StatusApp }) => `/admin/investment/${status}/status`, + investmentDetailPublish: ({ + id, + status, + }: { + id: string; + status: StatusApp; + }) => `/admin/investment/${id}/${status}`, }; const routeUserMobile = { @@ -51,7 +57,8 @@ const routeUserMobile = { `/forum/${id}/preview-report-comment`, // INVESTMENT - investmentByStatus: ({ status }: { status?: StatusApp }) => + investmentPortofolioByStatus: ({ status }: { status?: StatusApp }) => `/investment/(tabs)/portofolio?status=${status}`, investasiDetailPublish: ({ id }: { id: string }) => `/investment/${id}`, + investasiTransaction: `/investment/(tabs)/transaction` };