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
JavaScript
"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;