backend/fastify/get-all-comments/server.js
2024-05-26 19:51:33 +02:00

55 lines
1.3 KiB
JavaScript

// Declare a route
function listToTree(comments, parentProp = "reply") {
// Create id indexed comments dictionary
const commentsDict = {};
for (let comment of comments) {
commentsDict[comment.id] = {
...comment,
children: [],
};
}
// Build the tree
const tree = [];
for (const comment of comments) {
const parentId = comment[parentProp];
if (parentId) {
commentsDict[parentId].children.push(commentsDict[comment.id]);
} else {
tree.push(commentsDict[comment.id]);
}
}
return tree;
}
module.exports = function (fastify, opts, done) {
const pb = opts.pb;
fastify.post('/get-all-comments', async (request, reply) => {
const data = request.body;
const postId = data?.postId
let output;
try {
const result = await pb.collection("comments").getFullList({
filter: `post="${postId}"`,
expand: 'user,alreadyVoted(comment)',
fields: "*,expand.user,expand.alreadyVoted(comment).user,expand.alreadyVoted(comment).type",
sort: '-created',
})
output = listToTree(result);
}
catch(e) {
output = [];
}
+ reply.send({ items: output })
});
done();
};