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.

123 lines (121 loc) 2.84 kB
"use strict"; const express = require('express'); const router = express.Router(); const { getDb } = require("../services/mongo"); const { ObjectId } = require("mongodb"); // Like/Unlike endpoint router.post('/', async (req, res) => { const { liked } = req.body; const { userId, contentId } = req.query; const projectId = req.projectId; if (!userId || typeof liked !== 'boolean') { return res.status(400).json({ success: false, message: 'userId is required in query, liked (boolean) is required in body.' }); } try { const query = { userId: new ObjectId(userId), projectId }; const setObj = { liked }; if (contentId) { query.contentId = contentId; setObj.contentId = contentId; } const db = await getDb(); const response = await db.collection('likes').updateOne(query, { $set: setObj }, { upsert: true }); return res.status(200).json({ success: true, message: liked ? 'Liked.' : 'Unliked.', response }); } catch (error) { console.error('Error updating like status:', error); return res.status(500).json({ success: false, message: 'Failed to update like status.' }); } }); router.get('/', async (req, res) => { const { contentId } = req.query; const projectId = req.projectId; try { const query = { projectId }; if (contentId) { query.contentId = contentId; } const db = await getDb(); const likes = await db.collection('likes').find(query).toArray(); const likesCount = likes.filter(like => like.liked === true).length; const unlikesCount = likes.filter(like => like.liked === false).length; return res.status(200).json({ success: true, likes, likesCount, unlikesCount }); } catch (error) { console.error('Error fetching likes:', error); return res.status(500).json({ success: false, message: 'Failed to fetch likes.' }); } }); router.get('/:likeId', async (req, res) => { const { likeId } = req.params; const { contentId } = req.query; const projectId = req.projectId; try { const filter = { userId: new ObjectId(likeId), projectId }; if (contentId) filter.contentId = contentId; const db = await getDb(); const like = await db.collection('likes').findOne(filter); if (!like) { return res.status(404).json({ success: false, message: 'Like not found.' }); } return res.status(200).json({ success: true, like }); } catch (error) { console.error('Error fetching like by id:', error); return res.status(500).json({ success: false, message: 'Failed to fetch like.' }); } }); module.exports = router;