upd: webpush
Deskripsi: - database push notification - update package - memasang webpush NO Issues
This commit is contained in:
@@ -1,6 +0,0 @@
|
||||
import prisma from "@/lib/prisma";
|
||||
|
||||
export async function GET() {
|
||||
const sub = await prisma.subscription.findMany();
|
||||
return new Response(JSON.stringify({ data: sub }));
|
||||
}
|
||||
44
src/app/api/push-notification/route.ts
Normal file
44
src/app/api/push-notification/route.ts
Normal file
@@ -0,0 +1,44 @@
|
||||
import { prisma } from "@/module/_global"
|
||||
import { WibuServerPush } from 'wibu-pkg'
|
||||
|
||||
WibuServerPush.init({
|
||||
NEXT_PUBLIC_VAPID_PUBLIC_KEY: process.env.NEXT_PUBLIC_VAPID_PUBLIC_KEY!,
|
||||
VAPID_PRIVATE_KEY: process.env.VAPID_PRIVATE_KEY!,
|
||||
})
|
||||
|
||||
export async function POST(req: Request) {
|
||||
const { user, subscription } = await req.json()
|
||||
const upsert = await prisma.subscribe.upsert({
|
||||
where: {
|
||||
idUser: user
|
||||
},
|
||||
create: {
|
||||
idUser: user,
|
||||
subscription: JSON.stringify(subscription)
|
||||
},
|
||||
update: {
|
||||
subscription: JSON.stringify(subscription)
|
||||
}
|
||||
})
|
||||
|
||||
return new Response(JSON.stringify(upsert))
|
||||
|
||||
}
|
||||
|
||||
export async function PUT(req: Request) {
|
||||
const sub = await prisma.subscribe.findMany()
|
||||
const subs: PushSubscription[] = sub.map((v) => JSON.parse(v.subscription)) as PushSubscription[]
|
||||
|
||||
const kirim = await WibuServerPush.sendMany({
|
||||
subscriptions: subs as any,
|
||||
data: {
|
||||
body: "ini test ",
|
||||
title: "test notif",
|
||||
link: "/",
|
||||
variant: "notification"
|
||||
}
|
||||
})
|
||||
|
||||
return new Response(JSON.stringify(kirim))
|
||||
|
||||
}
|
||||
@@ -1,70 +0,0 @@
|
||||
import webpush from "web-push";
|
||||
import prisma from "@/lib/prisma";
|
||||
|
||||
// Set VAPID details for web-push
|
||||
webpush.setVapidDetails(
|
||||
"mailto:bip.production.js@gmail.com",
|
||||
process.env.NEXT_PUBLIC_VAPID_PUBLIC_KEY!,
|
||||
process.env.VAPID_PRIVATE_KEY!
|
||||
);
|
||||
|
||||
export async function POST() {
|
||||
try {
|
||||
// Fetch all subscriptions from your database
|
||||
const subscriptions = await prisma.subscription.findMany();
|
||||
|
||||
if (!subscriptions || subscriptions.length === 0) {
|
||||
console.error("No subscriptions available to send notification");
|
||||
return new Response("No subscriptions available", { status: 400 });
|
||||
}
|
||||
|
||||
// Notification payload
|
||||
const notificationPayload = JSON.stringify({
|
||||
title: "Test Notification",
|
||||
body: "This is a test notification | makuro",
|
||||
icon: "/icon-192x192.png",
|
||||
badge: "/icon-192x192.png",
|
||||
image: "/icon-192x192.png",
|
||||
});
|
||||
|
||||
let successCount = 0;
|
||||
let failureCount = 0;
|
||||
|
||||
// Loop through all subscriptions and send notifications
|
||||
for (const sub of subscriptions) {
|
||||
try {
|
||||
const subscriptionData = sub.data as any;
|
||||
|
||||
await webpush.sendNotification(subscriptionData, notificationPayload);
|
||||
// console.log(
|
||||
// `Notification sent successfully to ${subscriptionData.endpoint}`
|
||||
// );
|
||||
successCount++;
|
||||
} catch (error: any) {
|
||||
console.error(
|
||||
`Error sending push notification to subscription ${sub.id}:`,
|
||||
error
|
||||
);
|
||||
failureCount++;
|
||||
}
|
||||
}
|
||||
|
||||
// Return a success or failure response
|
||||
return new Response(
|
||||
JSON.stringify({
|
||||
message: `Notifications sent: ${successCount}, Failed: ${failureCount}`,
|
||||
success: failureCount === 0
|
||||
}),
|
||||
{ status: 200 }
|
||||
);
|
||||
} catch (error: any) {
|
||||
console.error("Error during notification process:", error);
|
||||
return new Response(
|
||||
JSON.stringify({
|
||||
success: false,
|
||||
error: error.message || "Failed to process notifications"
|
||||
}),
|
||||
{ status: 500 }
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
import webpush from "web-push";
|
||||
import prisma from "@/lib/prisma";
|
||||
webpush.setVapidDetails(
|
||||
"mailto:bip.production.js@gmail.com",
|
||||
process.env.NEXT_PUBLIC_VAPID_PUBLIC_KEY!,
|
||||
process.env.VAPID_PRIVATE_KEY!
|
||||
);
|
||||
|
||||
export async function POST(req: Request) {
|
||||
const { sub } = await req.json();
|
||||
console.log(sub);
|
||||
if (!sub || !sub.endpoint) {
|
||||
console.error("Invalid subscription object");
|
||||
return new Response("Invalid subscription object", { status: 400 });
|
||||
}
|
||||
|
||||
const data = await prisma.subscription.create({
|
||||
data: {
|
||||
id: sub.keys.auth,
|
||||
data: sub
|
||||
}
|
||||
});
|
||||
|
||||
return new Response(JSON.stringify({ data }));
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
import prisma from "@/lib/prisma";
|
||||
|
||||
export async function POST(req: Request) {
|
||||
const { sub } = await req.json();
|
||||
const data = await prisma.subscription.delete({
|
||||
where: {
|
||||
id: sub.keys.auth
|
||||
}
|
||||
});
|
||||
return new Response(JSON.stringify({ data }));
|
||||
}
|
||||
Reference in New Issue
Block a user