learnix / src /app /api /topic /route.js
shashidharak99's picture
Upload files
7d51e81 verified
import { NextResponse } from "next/server";
import { connectDB } from "@/lib/db";
import User from "@/models/User";
import Subject from "@/models/Subject";
import Topic from "@/models/Topic";
import Update from "@/models/Update";
export async function POST(req) {
try {
await connectDB();
const { usn, subject, topic, content, images, public: isPublic } = await req.json();
if (!usn || !subject || !topic) {
return NextResponse.json({ error: "USN, subject, and topic are required" }, { status: 400 });
}
const user = await User.findOne({ usn: usn.toUpperCase() });
if (!user) {
return NextResponse.json({ error: "User not found" }, { status: 404 });
}
// Find the subject for this user
const subj = await Subject.findOne({ userId: user._id, subject });
if (!subj) {
return NextResponse.json({ error: "Subject not found" }, { status: 404 });
}
// Create new topic
const newTopic = await Topic.create({
userId: user._id,
subjectId: subj._id,
topic,
content: content || "",
images: images || [],
public: typeof isPublic === "boolean" ? isPublic : true,
timestamp: new Date()
});
// If topic is public, create an Update record
try {
if (newTopic.public) {
await Update.create({
title: 'Topic creation',
content: `Created a topic - ${topic}`,
links: [`/works/${newTopic._id}`],
userId: user._id
});
}
} catch (uErr) {
console.error('Failed to create Update record for topic:', uErr);
// don't fail topic creation if update logging fails
}
// Fetch all subjects with topics for response (to maintain compatibility)
const subjects = await Subject.find({ userId: user._id }).lean();
const subjectsWithTopics = await Promise.all(
subjects.map(async (s) => {
const topics = await Topic.find({ subjectId: s._id }).lean();
return {
_id: s._id,
subject: s.subject,
public: s.public,
topics: topics.map(t => ({
_id: t._id,
topic: t.topic,
content: t.content,
images: t.images,
public: t.public,
timestamp: t.timestamp
}))
};
})
);
return NextResponse.json({ message: "Topic added successfully", subjects: subjectsWithTopics });
} catch (error) {
console.error(error);
return NextResponse.json({ error: "Something went wrong" }, { status: 500 });
}
}