mirror of
https://github.com/sudoxnym/habitica.git
synced 2026-04-14 19:56:23 +00:00
load user info per conversation.id - 2nd try (#11374)
* load user info per conversation.id * fix projection * load user data based on / from conversations * fix tests * remove unneeded properties of 2nd query
This commit is contained in:
parent
17e8b0a0fd
commit
e1abeeb78a
1 changed files with 37 additions and 2 deletions
|
|
@ -74,7 +74,37 @@ export async function getUserInbox (user, options = {asArray: true, page: 0, con
|
|||
}
|
||||
}
|
||||
|
||||
async function usersMapByConversations (owner, users) {
|
||||
let query = Inbox
|
||||
.aggregate([
|
||||
{
|
||||
$match: {
|
||||
ownerId: owner._id,
|
||||
uuid: { $in: users },
|
||||
},
|
||||
},
|
||||
{
|
||||
$group: {
|
||||
_id: '$uuid',
|
||||
userStyles: {$last: '$userStyles'},
|
||||
contributor: {$last: '$contributor'},
|
||||
},
|
||||
},
|
||||
]);
|
||||
|
||||
|
||||
const usersAr = await query.exec();
|
||||
const usersMap = {};
|
||||
|
||||
for (const usr of usersAr) {
|
||||
usersMap[usr._id] = usr;
|
||||
}
|
||||
|
||||
return usersMap;
|
||||
}
|
||||
|
||||
export async function listConversations (owner) {
|
||||
// group messages by user owned by logged-in user
|
||||
let query = Inbox
|
||||
.aggregate([
|
||||
{
|
||||
|
|
@ -89,8 +119,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 +127,16 @@ export async function listConversations (owner) {
|
|||
|
||||
const conversationsList = await query.exec();
|
||||
|
||||
const userIdList = conversationsList.map(c => c._id);
|
||||
|
||||
// get user-info based on conversations
|
||||
const usersMap = await usersMapByConversations(owner, userIdList);
|
||||
|
||||
const conversations = conversationsList.map((res) => ({
|
||||
uuid: res._id,
|
||||
...res,
|
||||
userStyles: usersMap[res._id].userStyles,
|
||||
contributor: usersMap[res._id].contributor,
|
||||
}));
|
||||
|
||||
return conversations;
|
||||
|
|
|
|||
Loading…
Reference in a new issue