Setup Database Connection
Setup Database Connection
1import mongoose from "mongoose";
2
3const MONGODB_URI = process.env.MONGODB_URI;
4
5export default async function dbConnect() {
6 if (mongoose.connection.readyState >= 1) return;
7 try {
8 await mongoose.connect(MONGODB_URI, {
9 useNewUrlParser: true,
10 useUnifiedTopology: true,
11 });
12 console.log("MongoDB Connected");
13 } catch (error) {
14 console.error("MongoDB Connection Error:", error);
15 }
16}
javascriptDefine Schema
Define Schema
1import mongoose from "mongoose";
2
3const SnippetSchema = new mongoose.Schema({
4 language: { type: String, required: true },
5 code: { type: String, required: true },
6});
7
8const TopicSchema = new mongoose.Schema({
9 title: { type: String, required: true },
10 description: { type: String },
11 snippets: [SnippetSchema], // Multiple code snippets
12});
13
14const Topic = mongoose.models.Topic || mongoose.model("Topic", TopicSchema);
15export default Topic;
javascriptGET - Fetch Topics in Chunks
GET - Fetch Topics in Chunks
1import { NextResponse } from "next/server";
2import dbConnect from "@/lib/dbConnect";
3import Topic from "@/models/Topic";
4
5// Get topics with pagination
6export async function GET(req) {
7 try {
8 await dbConnect();
9
10 const { searchParams } = new URL(req.url);
11 const page = parseInt(searchParams.get("page") || "1");
12 const limit = parseInt(searchParams.get("limit") || "5");
13 const skip = (page - 1) * limit;
14
15 const topics = await Topic.find().skip(skip).limit(limit);
16 const total = await Topic.countDocuments();
17
18 return NextResponse.json({ success: true, topics, total, page, limit });
19 } catch (error) {
20 return NextResponse.json({ success: false, message: error.message }, { status: 500 });
21 }
22}
javascript3.2 POST - Add a Topic with Snippets javascript Copy Edit
POST - Add a Topic with Snippets javascript Copy Edit
1export async function POST(req) {
2 try {
3 await dbConnect();
4 const { title, description, snippets } = await req.json();
5
6 const newTopic = new Topic({ title, description, snippets });
7 await newTopic.save();
8
9 return NextResponse.json({ success: true, topic: newTopic }, { status: 201 });
10 } catch (error) {
11 return NextResponse.json({ success: false, message: error.message }, { status: 500 });
12 }
13}
javascript