From f3372716d92839a8c6a59c3697de5aee61384961 Mon Sep 17 00:00:00 2001 From: negue Date: Fri, 20 Sep 2019 17:37:36 +0200 Subject: [PATCH] load user info per conversation.id (#11368) * load user info per conversation.id * fix projection --- website/server/libs/inbox/index.js | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/website/server/libs/inbox/index.js b/website/server/libs/inbox/index.js index c51fa9e67e..e0cc3f3527 100644 --- a/website/server/libs/inbox/index.js +++ b/website/server/libs/inbox/index.js @@ -1,6 +1,7 @@ import {mapInboxMessage, inboxModel as Inbox} from '../../models/message'; import {getUserInfo, sendTxn as sendTxnEmail} from '../email'; import {sendNotification as sendPushNotification} from '../pushNotifications'; +import { model as User } from '../../models/user'; const PM_PER_PAGE = 10; @@ -89,8 +90,6 @@ export async function listConversations (owner) { username: {$last: '$username' }, timestamp: {$last: '$timestamp'}, text: {$last: '$text'}, - userStyles: {$last: '$userStyles'}, - contributor: {$last: '$contributor'}, count: {$sum: 1}, }, }, @@ -99,9 +98,32 @@ export async function listConversations (owner) { const conversationsList = await query.exec(); + const usersQuery = { + _id: {$in: conversationsList.map(c => c._id) }, + }; + + const usersAr = await User.find(usersQuery, { + _id: 1, + contributor: 1, + items: 1, + preferences: 1, + stats: 1, + }).exec(); + const usersMap = {}; + + for (const usr of usersAr) { + usersMap[usr._id] = usr; + } + const conversations = conversationsList.map((res) => ({ uuid: res._id, ...res, + userStyles: { + items: usersMap[res._id].items, + preferences: usersMap[res._id].preferences, + stats: usersMap[res._id].stats, + }, + contributor: usersMap[res._id].contributor, })); return conversations;