diff --git a/src/app/api/mobile/discussion-general/[id]/comment/route.ts b/src/app/api/mobile/discussion-general/[id]/comment/route.ts index 1427ff9..89866a6 100644 --- a/src/app/api/mobile/discussion-general/[id]/comment/route.ts +++ b/src/app/api/mobile/discussion-general/[id]/comment/route.ts @@ -1,7 +1,9 @@ import { prisma } from "@/module/_global"; import { funGetUserById } from "@/module/auth"; import { createLogUserMobile } from "@/module/user"; +import _ from "lodash"; import { NextResponse } from "next/server"; +import { sendFCMNotificationMany } from "../../../../../../../xsendMany"; // KIRIM KOMENTAR DISKUSI UMUM @@ -35,6 +37,77 @@ export async function POST(request: Request, context: { params: { id: string } } } }) + const member = await prisma.discussionMember.findMany({ + where: { + idDiscussion: id, + }, + select: { + idUser: true, + User: { + select: { + Subscribe: { + select: { + subscription: true + } + }, + TokenDeviceUser: { + select: { + token: true + } + } + } + } + } + }) + + const userSent = await prisma.user.findFirst({ + where: { + id: userMobile.id + }, + select: { + name: true, + img: true + } + }) + + const dataFCM = member.map((v: any) => ({ + ..._.omit(v, ["idUser", "User", "Subscribe", "TokenDeviceUser"]), + tokens: v.User.TokenDeviceUser.map((v: any) => v.token) + })) + const tokenDup = dataFCM.filter((v: any) => v.tokens.length > 0).map((v: any) => v.tokens).flat(); + + if (userMobile.idUserRole != "supadmin") { + const perbekel = await prisma.user.findFirst({ + where: { + isActive: true, + idUserRole: "supadmin", + idVillage: userMobile.idVillage + }, + select: { + id: true, + Subscribe: { + select: { + subscription: true + } + }, + TokenDeviceUser: { + select: { + token: true + } + } + } + }) + + tokenDup.push(perbekel?.TokenDeviceUser.map((v: any) => v.token).flat()) + } + const tokenUnique = [...new Set(tokenDup.flat())]; + await sendFCMNotificationMany({ + token: tokenUnique, + title: "Komentar Baru", + body: `${userSent?.name}: ${data.comment}`, + data: { id: data.id, category: "discussion", content: id } + }) + // create log user const log = await createLogUserMobile({ act: 'CREATE', desc: 'User menambah komentar pada diskusi umum', table: 'discussionComment', data: data.id, user: userMobile.id }) return NextResponse.json({ success: true, message: "Berhasil menambah komentar" }, { status: 200 }); diff --git a/xsendMany.ts b/xsendMany.ts index 974b502..a03b132 100644 --- a/xsendMany.ts +++ b/xsendMany.ts @@ -33,6 +33,9 @@ export async function sendFCMNotificationMany({ token, title, body, data }: { to }, // Opsional: konfigurasi APNS (iOS) apns: { + headers: { + "apns-collapse-id": "order_update_notification", + }, payload: { aps: { sound: "default",