@replyke/express
Version:
Replyke: Build interactive apps with social features like comments, votes, feeds, user lists, notifications, and more.
100 lines (99 loc) • 3.23 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.entityParams = exports.commentParams = void 0;
const sequelize_1 = require("sequelize");
const models_1 = require("../models");
exports.commentParams = {
attributes: {
include: [
[
// Subquery to count replies for each comment
sequelize_1.Sequelize.literal(`(
SELECT COUNT(*)::int
FROM "Comments" AS "reply"
WHERE "reply"."parentId" = "Comment"."id"
AND "reply"."deletedAt" IS NULL
AND "reply"."parentDeletedAt" IS NULL
)`),
"repliesCount",
],
],
},
include: [
{
model: models_1.User,
as: "user", // Assuming you used `as: "user"` in the Comment-User association
attributes: {
exclude: [
"hash",
"salt",
"email",
"isVerified",
"isActive",
"lastActive",
"secureMetadata",
],
}, // Customize fields as needed
},
],
};
exports.entityParams = {
attributes: {
include: [
[
// Subquery to count comments for each entity
sequelize_1.Sequelize.literal(`(
SELECT COUNT(*)::int
FROM "Comments" AS "comment"
WHERE "comment"."entityId" = "Entity"."id"
AND "comment"."deletedAt" IS NULL
AND "comment"."parentDeletedAt" IS NULL
)`),
"repliesCount",
],
[
// Subquery to get the topComment with user details
sequelize_1.Sequelize.literal(`(
SELECT row_to_json(c)
FROM (
SELECT
"comment"."id",
"comment"."content",
array_length("comment"."upvotes", 1) AS "upvotesCount",
json_build_object(
'id', "user"."id",
'name', "user"."name",
'username', "user"."username",
'avatar', "user"."avatar"
) AS "user"
FROM "Comments" AS "comment"
LEFT JOIN "Users" AS "user" ON "user"."id" = "comment"."userId"
WHERE "comment"."entityId" = "Entity"."id"
AND "comment"."deletedAt" IS NULL
AND "comment"."parentDeletedAt" IS NULL
ORDER BY array_length("comment"."upvotes", 1) DESC
LIMIT 1
) c
)`),
"topComment",
],
],
},
include: [
{
model: models_1.User,
as: "user", // Assuming you used `as: "user"` in the Comment-User association
attributes: {
exclude: [
"hash",
"salt",
"email",
"isVerified",
"isActive",
"lastActive",
"secureMetadata",
],
}, // Customize fields as needed
},
],
};