UNPKG

powr-sdk-api

Version:

Shared API core library for PowrStack projects. Zero dependencies - works with Express, Next.js API routes, and other frameworks. All features are optional and install only what you need.

204 lines (198 loc) 5.09 kB
"use strict"; const express = require("express"); const router = express.Router(); const { getDb } = require("../services/mongo"); const { ObjectId } = require("mongodb"); // Get all comments router.get("/", async (req, res) => { try { const { contentId } = req.query; const projectId = req.projectId; // Use middleware-injected projectId const query = { projectId }; if (contentId) { query.contentId = contentId; } const db = await getDb(); const commentData = await db.collection("comments").find(query).toArray(); return res.json({ success: true, data: commentData }); } catch (error) { console.error("Error retrieving comments:", error); return res.status(500).json({ success: false, message: "Failed to retrieve comments." }); } }); // Create new comment router.post("/", async (req, res) => { try { var _req$user, _req$user2; const { contentId, comment, files, ...customFields } = req.body; const projectId = req.projectId; const userId = (_req$user = req.user) === null || _req$user === void 0 ? void 0 : _req$user.powrId; const userName = (_req$user2 = req.user) === null || _req$user2 === void 0 ? void 0 : _req$user2.fullName; if (!contentId || !comment && (!files || !files.length)) { return res.status(400).json({ success: false, message: "Content ID and comment (or files) are required" }); } const commentData = { projectId, contentId, comment: comment || "", ...(files && { files }), ...customFields, userId, userName: userName || null, createdBy: userId ? { id: userId, _id: userId, name: userName } : null, createdAt: new Date() }; const db = await getDb(); const result = await db.collection("comments").insertOne(commentData); return res.status(201).json({ success: true, message: "Comment created successfully", id: result.insertedId }); } catch (error) { console.error("Error creating comment:", error); return res.status(500).json({ success: false, message: "Failed to create comment." }); } }); // Update comment (owner only) router.patch("/:id", async (req, res) => { try { var _req$user3; const { id } = req.params; const { comment } = req.body; const projectId = req.projectId; const userId = (_req$user3 = req.user) === null || _req$user3 === void 0 ? void 0 : _req$user3.powrId; if (!ObjectId.isValid(id)) { return res.status(400).json({ success: false, message: "Invalid comment id" }); } if (comment === undefined) { return res.status(400).json({ success: false, message: "comment is required" }); } const db = await getDb(); const existing = await db.collection("comments").findOne({ _id: new ObjectId(id), projectId }); if (!existing) { return res.status(404).json({ success: false, message: "Comment not found" }); } if (existing.userId !== userId) { return res.status(403).json({ success: false, message: "Not allowed to edit this comment" }); } await db.collection("comments").updateOne({ _id: new ObjectId(id), projectId }, { $set: { comment, updatedAt: new Date() } }); return res.json({ success: true, message: "Comment updated" }); } catch (error) { console.error("Error updating comment:", error); return res.status(500).json({ success: false, message: "Failed to update comment." }); } }); // Delete comment (owner only) router.delete("/:id", async (req, res) => { try { var _req$user4; const { id } = req.params; const projectId = req.projectId; const userId = (_req$user4 = req.user) === null || _req$user4 === void 0 ? void 0 : _req$user4.powrId; if (!ObjectId.isValid(id)) { return res.status(400).json({ success: false, message: "Invalid comment id" }); } const db = await getDb(); const existing = await db.collection("comments").findOne({ _id: new ObjectId(id), projectId }); if (!existing) { return res.status(404).json({ success: false, message: "Comment not found" }); } if (existing.userId !== userId) { return res.status(403).json({ success: false, message: "Not allowed to delete this comment" }); } await db.collection("comments").deleteOne({ _id: new ObjectId(id), projectId }); return res.json({ success: true, message: "Comment deleted" }); } catch (error) { console.error("Error deleting comment:", error); return res.status(500).json({ success: false, message: "Failed to delete comment." }); } }); module.exports = router;