From 87ee2f03c114f560b2a16c6dbe17b0dd9b53ff5d Mon Sep 17 00:00:00 2001 From: Akhil Meka Date: Thu, 4 Sep 2025 16:16:01 +0530 Subject: [PATCH] feat: add filtering on taggedUsers field --- src/ctask/ctask.service.ts | 22 ++++++++++++++++++---- src/notification/notification.service.ts | 22 ++++++++++++++++++---- src/permit/permit.service.ts | 22 ++++++++++++++++++---- src/processed/processed.service.ts | 22 ++++++++++++++++++---- src/rts/rts.service.ts | 22 ++++++++++++++++++---- src/task/task.service.ts | 22 ++++++++++++++++++---- 6 files changed, 108 insertions(+), 24 deletions(-) diff --git a/src/ctask/ctask.service.ts b/src/ctask/ctask.service.ts index f382566..9b81381 100644 --- a/src/ctask/ctask.service.ts +++ b/src/ctask/ctask.service.ts @@ -78,10 +78,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: { @@ -89,14 +101,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([ diff --git a/src/notification/notification.service.ts b/src/notification/notification.service.ts index e69834c..6a84504 100644 --- a/src/notification/notification.service.ts +++ b/src/notification/notification.service.ts @@ -112,7 +112,7 @@ export async function listNotifications( const page = params.page || 1; const pageSize = params.pageSize || 10; const sortObj = getSortObject(params, notificationFields); - const filterObj = getFilterObject(params) || []; + let filterObj = getFilterObject(params) || []; filterObj.forEach((item) => { if (item.changes) { @@ -125,8 +125,20 @@ export async function listNotifications( filterObj.push({ client: new mongoose.Types.ObjectId(user.orgId) }); } + 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: { @@ -134,14 +146,16 @@ export async function listNotifications( $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 pipeline: any = [ diff --git a/src/permit/permit.service.ts b/src/permit/permit.service.ts index 526fc41..e82ca08 100644 --- a/src/permit/permit.service.ts +++ b/src/permit/permit.service.ts @@ -66,14 +66,26 @@ export async function listPermits( const page = params.page || 1; const pageSize = params.pageSize || 10; const sortObj = getSortObject(params, permitFields); - const filterObj = getFilterObject(params) || []; + let filterObj = getFilterObject(params) || []; if (user.role == "client") { filterObj.push({ client: new mongoose.Types.ObjectId(user.orgId) }); } + 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: { @@ -81,14 +93,16 @@ export async function listPermits( $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 permitsList = await permitModel.aggregate([ diff --git a/src/processed/processed.service.ts b/src/processed/processed.service.ts index fcb34ca..f455252 100644 --- a/src/processed/processed.service.ts +++ b/src/processed/processed.service.ts @@ -65,14 +65,26 @@ export async function listProcessedPermits( const page = params.page || 1; const pageSize = params.pageSize || 10; const sortObj = getSortObject(params, processedFields); - const filterObj = getFilterObject(params) || []; + let filterObj = getFilterObject(params) || []; if (user.role == "client") { filterObj.push({ client: new mongoose.Types.ObjectId(user.orgId) }); } + 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: { @@ -80,14 +92,16 @@ export async function listProcessedPermits( $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 pipeline: any = [ diff --git a/src/rts/rts.service.ts b/src/rts/rts.service.ts index 54a98e9..84cbb23 100644 --- a/src/rts/rts.service.ts +++ b/src/rts/rts.service.ts @@ -72,14 +72,26 @@ export async function listRts( const page = params.page || 1; const pageSize = params.pageSize || 10; const sortObj = getSortObject(params, rtsFields); - const filterObj = getFilterObject(params) || []; + let filterObj = getFilterObject(params) || []; if (user.role === "client") { filterObj.push({ client: new mongoose.Types.ObjectId(user.orgId) }); } + 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: { @@ -87,14 +99,16 @@ export async function listRts( $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 rtsList = await rtsModel.aggregate([ diff --git a/src/task/task.service.ts b/src/task/task.service.ts index 4701d09..821a0ba 100644 --- a/src/task/task.service.ts +++ b/src/task/task.service.ts @@ -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([