aboutsummaryrefslogtreecommitdiffstats
path: root/middleware/src/app/api/notifications
diff options
context:
space:
mode:
Diffstat (limited to 'middleware/src/app/api/notifications')
-rw-r--r--middleware/src/app/api/notifications/get/route.ts26
-rw-r--r--middleware/src/app/api/notifications/set/route.ts30
2 files changed, 56 insertions, 0 deletions
diff --git a/middleware/src/app/api/notifications/get/route.ts b/middleware/src/app/api/notifications/get/route.ts
new file mode 100644
index 0000000..344e41b
--- /dev/null
+++ b/middleware/src/app/api/notifications/get/route.ts
@@ -0,0 +1,26 @@
+import { Redis } from "@upstash/redis";
+
+export const runtime = "edge";
+
+const redis = new Redis({
+ url: process.env.KV_REST_API_URL!,
+ token: process.env.KV_REST_API_TOKEN!,
+});
+
+// /api/fcm/list?topic=<topic>
+export async function GET(req: Request) {
+ const { searchParams } = new URL(req.url);
+ const topic = searchParams.get("topic");
+
+ if (!topic) {
+ return new Response(JSON.stringify({ error: "Missing topic" }), { status: 400 });
+ }
+
+ const key = `fcm-${topic}`;
+ const tokens = await redis.smembers<string[]>(key);
+
+ return new Response(JSON.stringify({ topic, tokens }), {
+ status: 200,
+ headers: { "Content-Type": "application/json" },
+ });
+}
diff --git a/middleware/src/app/api/notifications/set/route.ts b/middleware/src/app/api/notifications/set/route.ts
new file mode 100644
index 0000000..3a584fb
--- /dev/null
+++ b/middleware/src/app/api/notifications/set/route.ts
@@ -0,0 +1,30 @@
+import { Redis } from "@upstash/redis";
+
+export const runtime = "edge";
+const redis = new Redis({
+ url: process.env.KV_REST_API_URL!,
+ token: process.env.KV_REST_API_TOKEN!,
+});
+
+// /api/fcm?topic=<topic>&token=<fcm_token>&action=subscribe|unsubscribe
+export async function GET(req: Request) {
+ const { searchParams } = new URL(req.url);
+ const topic = searchParams.get("topic");
+ const token = searchParams.get("token");
+ const action = searchParams.get("action"); // "subscribe" | "unsubscribe"
+
+ if (!topic || !token || !action) {
+ return new Response(JSON.stringify({ error: "Missing params" }), { status: 400 });
+ }
+ const key = `fcm-${topic}`;
+
+ if (action === "subscribe") {
+ await redis.sadd(key, token);
+ } else if (action === "unsubscribe") {
+ await redis.srem(key, token);
+ } else {
+ return new Response(JSON.stringify({ error: "Invalid action" }), { status: 400 });
+ }
+
+ return new Response(JSON.stringify({ success: true }), { status: 200 });
+}
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage