All files / src/controllers/products-controllers getProductComments.js

71.42% Statements 5/7
100% Branches 0/0
100% Functions 1/1
71.42% Lines 5/7

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39            7x 7x 7x   7x                                     7x                  
import ProductsCommentsModel from "../../models/ProductsComments.js";
import toObjectId from "../../utilities/toObjectId.js";
 
 
export default async function getProductComments(productId, options) {
 
    try {
        const { sliceNumber, sliceSize } = options;
        const startSlice = sliceNumber * sliceSize;
 
        const results = await ProductsCommentsModel.aggregate([
            { $match: { productId: toObjectId(productId) } },
            { $unwind: '$comments' },
            { $replaceRoot: { newRoot: '$comments' } },
            { $skip: startSlice },
            { $limit: sliceSize + 1 },
            {
                $lookup: {
                    from: "users",
                    as: "commenterData",
                    localField: "commenterId",
                    foreignField: "_id",
                    pipeline: [{ $project: { userName: 1, avatar: 1, _id: 0 } }]
                }
            },
            { $set: { commenterData: { $first: "$commenterData" } } },
            { $project: { updatedAt: 0 } }
        ])
 
        return {
            thereIsMore: !!results[sliceSize],
            comments: results.slice(0, sliceSize)
        }
    } catch (error) {
        console.log(error)
        return null;
    }
}