feat: add filtering on taggedUsers field

This commit is contained in:
2025-09-04 16:16:01 +05:30
parent dd20543dc6
commit 87ee2f03c1
6 changed files with 108 additions and 24 deletions

View File

@@ -88,10 +88,22 @@ export async function listTasks(
const page = params.page || 1;
const pageSize = params.pageSize || 10;
const sortObj = getSortObject(params, taskFields);
const filterObj = getFilterObject(params) || [];
let filterObj = getFilterObject(params) || [];
const taggedUserFilterIndex = filterObj.findIndex((item) =>
Object.keys(item).includes("taggedUsers")
);
let taggedFilter = [];
if (sortObj.taggedUsers) {
if (taggedUserFilterIndex != -1) {
const filterItem = filterObj[taggedUserFilterIndex].taggedUsers;
let filterValues = null;
if (filterItem["$eq"]) filterValues = [filterItem["$eq"]];
else filterValues = filterItem["$in"];
filterValues = filterValues.map((item) => item.toString());
taggedFilter = [
{
$addFields: {
@@ -99,14 +111,16 @@ export async function listTasks(
$filter: {
input: "$taggedUsers",
as: "user",
cond: { $eq: ["$$user.userId", user.userId] },
cond: { $in: ["$$user.userId", filterValues] },
},
},
},
},
{ $match: { "taggedUsers.0": { $exists: true } } },
{ $sort: { "taggedUsers.taggedAt": sortObj.taggedUsers } },
{ $sort: { "taggedUsers.taggedAt": sortObj.taggedUsers ?? -1 } },
];
filterObj.splice(taggedUserFilterIndex, 1);
}
const taskList = await taskModel.aggregate([