diff --git a/public/openapi/components/schemas/PostsObject.yaml b/public/openapi/components/schemas/PostsObject.yaml index 2c6595c1ca..ed546b052a 100644 --- a/public/openapi/components/schemas/PostsObject.yaml +++ b/public/openapi/components/schemas/PostsObject.yaml @@ -112,4 +112,6 @@ PostsObject: nullable: true type: string isMainPost: - type: boolean \ No newline at end of file + type: boolean + replies: + type: number \ No newline at end of file diff --git a/src/posts/data.js b/src/posts/data.js index bc4ba790d1..4d7edac799 100644 --- a/src/posts/data.js +++ b/src/posts/data.js @@ -53,6 +53,11 @@ module.exports = function (Posts) { data.pid = pid; plugins.fireHook('action:post.setFields', { data: data }); }; + + Posts.getReplyCount = async function (pid) { + // const keys = pids.map(pid => 'pid:' +pid + ':replies'); + return await db.sortedSetCard(`pid:${pid}:replies`); + }; }; function modifyPost(post, fields) { diff --git a/src/posts/summary.js b/src/posts/summary.js index ad3258076a..60d2305cea 100644 --- a/src/posts/summary.js +++ b/src/posts/summary.js @@ -38,7 +38,7 @@ module.exports = function (Posts) { const tidToTopic = toObject('tid', topicsAndCategories.topics); const cidToCategory = toObject('cid', topicsAndCategories.categories); - posts.forEach(function (post) { + Promise.all(posts.map(async (post) => { // If the post author isn't represented in the retrieved users' data, then it means they were deleted, assume guest. if (!uidToUser.hasOwnProperty(post.uid)) { post.uid = 0; @@ -47,9 +47,12 @@ module.exports = function (Posts) { post.topic = tidToTopic[post.tid]; post.category = post.topic && cidToCategory[post.topic.cid]; post.isMainPost = post.topic && post.pid === post.topic.mainPid; + post.replies = await Posts.getReplyCount(post.pid); post.deleted = post.deleted === 1; post.timestampISO = utils.toISOString(post.timestamp); - }); + + return post; + })); posts = posts.filter(post => tidToTopic[post.tid]);