svrjs-nextjs-website/app/api/newsletter/subscriber/route.ts

45 lines
1.1 KiB
TypeScript
Raw Normal View History

2024-08-26 13:11:47 +02:00
import { NextResponse } from "next/server";
import clientPromise from "@/lib/db";
2024-08-26 13:11:47 +02:00
interface Subscriber {
email: string;
subscribedAt: Date;
}
export const dynamic = "force-dynamic";
2024-08-26 13:11:47 +02:00
export async function GET(req: Request) {
try {
const url = new URL(req.url);
const page = parseInt(url.searchParams.get("page") || "1", 10);
const limit = 10;
const skip = (page - 1) * limit;
const client = await clientPromise;
const db = client.db("newsletter");
const collection = db.collection("subscribers");
// Pagination
2024-08-26 13:11:47 +02:00
const documents = await collection.find().skip(skip).limit(limit).toArray();
const subscribers: Subscriber[] = documents.map((doc) => ({
email: doc.email,
subscribedAt:
doc.subscribedAt instanceof Date
? doc.subscribedAt
: new Date(doc.subscribedAt),
}));
const totalSubscribers = await collection.countDocuments();
return NextResponse.json({
subscribers,
totalSubscribers,
totalPages: Math.ceil(totalSubscribers / limit),
});
} catch (error) {
console.error("Error fetching subscribers:", error);
return new NextResponse("Internal Server Error", { status: 500 });
}
}