diff --git a/src/app/api/mobile/admin/donation/[id]/invoice/route.ts b/src/app/api/mobile/admin/donation/[id]/invoice/route.ts index 1627bf56..48d85a99 100644 --- a/src/app/api/mobile/admin/donation/[id]/invoice/route.ts +++ b/src/app/api/mobile/admin/donation/[id]/invoice/route.ts @@ -1,6 +1,9 @@ import { NextResponse } from "next/server"; import { prisma } from "@/lib"; import _ from "lodash"; +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 }; @@ -50,6 +53,7 @@ async function GET(req: Request, { params }: { params: { id: string } }) { interface DataType { donationId: string; nominal: number; + senderId: string; } async function PUT(req: Request, { params }: { params: { id: string } }) { @@ -111,6 +115,9 @@ async function PUT(req: Request, { params }: { params: { id: string } }) { data: { donasiMaster_StatusInvoiceId: checkStatusTransaksi.id, }, + select: { + authorId: true, + }, }); if (!updateInvoice) { @@ -154,6 +161,38 @@ async function PUT(req: Request, { params }: { params: { id: string } }) { ); } + // SEND NOTIFICATION: to donatur + await sendNotificationMobileToOneUser({ + recipientId: updateInvoice?.authorId as string, + senderId: data?.senderId || "", + payload: { + title: "Transaksi Berhasil" as NotificationMobileTitleType, + body: `Selamat anda menjadi donatur pada ${updateDonasi?.title}` as NotificationMobileBodyType, + type: "announcement", + kategoriApp: "DONASI", + deepLink: routeUserMobile.donationTransaction, + }, + }); + + // SEND NOTIFICATION: to creator + await sendNotificationMobileToOneUser({ + recipientId: updateDonasi?.authorId as any, + senderId: data?.senderId || "", + payload: { + title: "Ada Donatur Baru !" as NotificationMobileTitleType, + body: `Cek daftar donatur pada ${updateDonasi?.title}` as NotificationMobileBodyType, + type: "announcement", + kategoriApp: "DONASI", + deepLink: routeUserMobile.donationDetailPublish({ + id: updateDonasi?.id as string, + }), + }, + }); + + + + + return NextResponse.json( { success: true, diff --git a/src/app/api/mobile/admin/donation/[id]/route.ts b/src/app/api/mobile/admin/donation/[id]/route.ts index ab040081..557f8cb0 100644 --- a/src/app/api/mobile/admin/donation/[id]/route.ts +++ b/src/app/api/mobile/admin/donation/[id]/route.ts @@ -1,6 +1,15 @@ +import { + sendNotificationMobileToManyUser, + sendNotificationMobileToOneUser, +} from "@/lib/mobile/notification/send-notification"; +import { routeUserMobile } from "@/lib/mobile/route-page-mobile"; import prisma from "@/lib/prisma"; import _ from "lodash"; import { NextResponse } from "next/server"; +import { + NotificationMobileBodyType, + NotificationMobileTitleType, +} from "../../../../../../../types/type-mobile-notification"; export { GET, PUT }; @@ -48,7 +57,7 @@ async function GET(request: Request, { params }: { params: { id: string } }) { DonasiMaster_StatusInvoice: { name: "Berhasil", }, - }, + }, }); return NextResponse.json( @@ -60,7 +69,7 @@ async function GET(request: Request, { params }: { params: { id: string } }) { donatur: successInvoice, }, }, - { status: 200 } + { status: 200 }, ); } catch (error) { return NextResponse.json( @@ -69,7 +78,7 @@ async function GET(request: Request, { params }: { params: { id: string } }) { message: "Error get detail Investasi", reason: (error as Error).message, }, - { status: 500 } + { status: 500 }, ); } } @@ -77,6 +86,10 @@ async function GET(request: Request, { params }: { params: { id: string } }) { async function PUT(request: Request, { params }: { params: { id: string } }) { const { id } = params; const { data } = await request.json(); + const { catatan, senderId } = data; + console.log("[PUT CATATAN]", catatan); + console.log("[PUT SENDER ID]", senderId); + const { searchParams } = new URL(request.url); const status = searchParams.get("status"); const fixStatus = _.startCase(status as string); @@ -102,7 +115,7 @@ async function PUT(request: Request, { params }: { params: { id: string } }) { message: "Error update data event", reason: "Status not found", }, - { status: 500 } + { status: 500 }, ); if (fixStatus === "Reject") { @@ -111,11 +124,24 @@ async function PUT(request: Request, { params }: { params: { id: string } }) { id: id, }, data: { - catatan: data, + catatan: catatan, donasiMaster_StatusDonasiId: checkStatus.id, }, }); + // SEND NOTIFICATION + await sendNotificationMobileToOneUser({ + recipientId: updateData.authorId as any, + senderId: senderId, + payload: { + title: "Pengajuan Review Ditolak", + body: "Mohon perbaiki data sesuai catatan penolakan !", + type: "announcement", + kategoriApp: "DONASI", + deepLink: routeUserMobile.donationByStatus({ status: "reject" }), + }, + }); + fixData = updateData; } else if (fixStatus === "Publish") { const updateData = await prisma.donasi.update({ @@ -128,6 +154,39 @@ async function PUT(request: Request, { params }: { params: { id: string } }) { }, }); + // SEND NOTIFICAtION + await sendNotificationMobileToOneUser({ + recipientId: updateData.authorId as any, + senderId: senderId, + payload: { + title: "Review Selesai", + body: `Donasi kamu telah dipublikasikan ! ${updateData.title}` as NotificationMobileBodyType, + type: "announcement", + kategoriApp: "DONASI", + deepLink: routeUserMobile.donationByStatus({ status: "publish" }), + }, + }); + + const allUsers = await prisma.user.findMany({ + where: { + NOT: { id: updateData.authorId as any }, + active: true, + }, + select: { id: true }, + }); + + await sendNotificationMobileToManyUser({ + recipientIds: allUsers.map((user) => user.id), + senderId: senderId, + payload: { + title: "Ayo Cek Donasi Terbaru" as NotificationMobileTitleType, + body: `${updateData.title}` as NotificationMobileBodyType, + type: "announcement", + kategoriApp: "DONASI", + deepLink: routeUserMobile.donationDetailPublish({ id: id }), + }, + }); + fixData = updateData; } @@ -137,7 +196,7 @@ async function PUT(request: Request, { params }: { params: { id: string } }) { message: "Data Donasi Berhasil Diambil", data: data, }, - { status: 200 } + { status: 200 }, ); } catch (error) { return NextResponse.json( @@ -146,7 +205,7 @@ async function PUT(request: Request, { params }: { params: { id: string } }) { message: "Error get detail Investasi", reason: (error as Error).message, }, - { status: 500 } + { status: 500 }, ); } } diff --git a/src/app/api/mobile/donation/[id]/invoice/route.ts b/src/app/api/mobile/donation/[id]/invoice/route.ts index 56840a33..da00d061 100644 --- a/src/app/api/mobile/donation/[id]/invoice/route.ts +++ b/src/app/api/mobile/donation/[id]/invoice/route.ts @@ -1,6 +1,12 @@ import _ from "lodash"; import { NextResponse } from "next/server"; import prisma from "@/lib/prisma"; +import { sendNotificationMobileToManyUser } from "@/lib/mobile/notification/send-notification"; +import { + NotificationMobileBodyType, + NotificationMobileTitleType, +} from "../../../../../../../types/type-mobile-notification"; +import { routeAdminMobile } from "@/lib/mobile/route-page-mobile"; export { POST, GET, PUT }; @@ -33,6 +39,14 @@ async function POST(request: Request, { params }: { params: { id: string } }) { }, }); + if (!create) { + return NextResponse.json({ + status: 500, + success: false, + message: "Gagal membuat invoice", + }); + } + return NextResponse.json({ status: 201, success: true, @@ -48,7 +62,7 @@ async function POST(request: Request, { params }: { params: { id: string } }) { reason: (error as Error).message, }); } -} +} async function GET(request: Request, { params }: { params: { id: string } }) { try { @@ -65,7 +79,7 @@ async function GET(request: Request, { params }: { params: { id: string } }) { createdAt: true, donasiMaster_BankId: true, donasiMaster_StatusInvoiceId: true, -MasterBank: true, + MasterBank: true, Donasi: { select: { id: true, @@ -139,7 +153,7 @@ async function PUT(request: Request, { params }: { params: { id: string } }) { }); } - const update = await prisma.donasi_Invoice.update({ + const updated = await prisma.donasi_Invoice.update({ where: { id: id, }, @@ -164,7 +178,40 @@ async function PUT(request: Request, { params }: { params: { id: string } }) { }, }); - console.log("[UPDATE INVOICE]", update); + if (!updated) { + return NextResponse.json({ + status: 500, + success: false, + message: "Gagal memperbarui data", + }); + } + + const findUsers = await prisma.user.findMany({ + where: { + masterUserRoleId: "2", + active: true, + NOT: { id: updated?.Donasi?.authorId as string }, + }, + select: { id: true }, + }); + + // SEND NOTIFICATION + await sendNotificationMobileToManyUser({ + recipientIds: findUsers.map((user) => user.id), + senderId: data.authorId, + payload: { + title: "Ada Donasi Baru !" as NotificationMobileTitleType, + body: `Cek data investor pada ${updated?.Donasi?.title}` as NotificationMobileBodyType, + type: "announcement", + kategoriApp: "DONASI", + deepLink: routeAdminMobile.donationDetailPublish({ + id: updated?.Donasi?.id as string, + status: "publish", + }), + }, + }); + + console.log("[UPDATE INVOICE]", updated); return NextResponse.json({ status: 200, diff --git a/src/app/api/mobile/donation/route.ts b/src/app/api/mobile/donation/route.ts index a31d2194..4e7ece15 100644 --- a/src/app/api/mobile/donation/route.ts +++ b/src/app/api/mobile/donation/route.ts @@ -1,6 +1,9 @@ +import { sendNotificationMobileToManyUser } from "@/lib/mobile/notification/send-notification"; import prisma from "@/lib/prisma"; import _ from "lodash"; import { NextResponse } from "next/server"; +import { NotificationMobileBodyType } from "../../../../../types/type-mobile-notification"; +import { routeAdminMobile } from "@/lib/mobile/route-page-mobile"; export { POST }; @@ -49,6 +52,26 @@ async function POST(request: Request) { console.log("[DATA DONASI]", dataDonasi); + const adminUsers = await prisma.user.findMany({ + where: { masterUserRoleId: "2", NOT: { id: data.authorId } }, + select: { id: true }, + }); + + // SEND NOTIFICATION + await sendNotificationMobileToManyUser({ + recipientIds: adminUsers.map((user) => user.id), + senderId: data.authorId, + payload: { + title: "Pengajuan Review Baru", + body: data.title as NotificationMobileBodyType, + type: "announcement", + deepLink: routeAdminMobile.donationByStatus({ status: "review" }), + kategoriApp: "DONASI", + }, + }); + + + if (!dataDonasi) return NextResponse.json({ status: 400, diff --git a/src/lib/mobile/route-page-mobile.ts b/src/lib/mobile/route-page-mobile.ts index 9c5749e0..9f5f42dd 100644 --- a/src/lib/mobile/route-page-mobile.ts +++ b/src/lib/mobile/route-page-mobile.ts @@ -29,8 +29,19 @@ const routeAdminMobile = { id: string; status: StatusApp; }) => `/admin/investment/${id}/${status}`, + + // DONATION + donationByStatus: ({ status }: { status: StatusApp }) => `/admin/donation/${status}/status`, + donationDetailPublish: ({ + id, + status, + }: { + id: string; + status: StatusApp; + }) => `/admin/donation/${id}/${status}`, }; +// ================ ROUTER USER ================= const routeUserMobile = { home: `/(user)/home`, // JOB @@ -60,5 +71,11 @@ const routeUserMobile = { investmentPortofolioByStatus: ({ status }: { status?: StatusApp }) => `/investment/(tabs)/portofolio?status=${status}`, investmentDetailPublish: ({ id }: { id: string }) => `/investment/${id}`, - investmentTransaction: `/investment/(tabs)/transaction` + investmentTransaction: `/investment/(tabs)/transaction`, + + // DONATION + donationByStatus: ({ status }: { status?: StatusApp }) => + `/donation/(tabs)/status?status=${status}`, + donationDetailPublish: ({ id }: { id: string }) => `/donation/${id}`, + donationTransaction: `/donation/(tabs)/my-donation`, };