notification system implemented

need refinements
This commit is contained in:
dimitar committed 2026-03-11 06:07:16 +01:00
1 parent 612259f020
commit 1143f8ca02
33 files changed
+2221 -222

No files matched your search

@@ -0,0 +1,71 @@
import { NextRequest, NextResponse } from "next/server";
import { auth } from "@clerk/nextjs/server";
import { getDatabase } from "@/lib/database";
import log from "@/lib/logger";
/**
* POST /api/notifications/save-token
* Save the user's Expo push notification token
*/
export async function POST(req: NextRequest) {
try {
const { userId } = await auth();
if (!userId) {
return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
}
const body = await req.json();
const { expoPushToken, deviceType } = body;
if (!expoPushToken) {
return NextResponse.json(
{ error: "Missing required field: expoPushToken" },
{ status: 400 },
);
}
// Validate device type
if (deviceType && !["ios", "android"].includes(deviceType)) {
return NextResponse.json(
{ error: "Invalid deviceType. Must be 'ios' or 'android'" },
{ status: 400 },
);
}
const db = await getDatabase();
// Update user with push token
const updatedUser = await db.updateUser(userId, {
expoPushToken,
deviceType: deviceType || undefined,
});
if (!updatedUser) {
return NextResponse.json({ error: "User not found" }, { status: 404 });
}
log.info("Push token saved", {
userId,
deviceType,
tokenPrefix: expoPushToken.substring(0, 20) + "...",
});
return NextResponse.json({
success: true,
data: {
message: "Push token saved successfully",
deviceType: updatedUser.deviceType,
},
meta: {
timestamp: new Date().toISOString(),
},
});
} catch (error) {
log.error("Failed to save push token", error);
return NextResponse.json(
{ error: "Internal server error" },
{ status: 500 },
);
}
}