feat: add filtering on taggedUsers field
This commit is contained in:
@@ -78,10 +78,22 @@ export async function listTasks(
|
|||||||
const page = params.page || 1;
|
const page = params.page || 1;
|
||||||
const pageSize = params.pageSize || 10;
|
const pageSize = params.pageSize || 10;
|
||||||
const sortObj = getSortObject(params, taskFields);
|
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 = [];
|
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 = [
|
taggedFilter = [
|
||||||
{
|
{
|
||||||
$addFields: {
|
$addFields: {
|
||||||
@@ -89,14 +101,16 @@ export async function listTasks(
|
|||||||
$filter: {
|
$filter: {
|
||||||
input: "$taggedUsers",
|
input: "$taggedUsers",
|
||||||
as: "user",
|
as: "user",
|
||||||
cond: { $eq: ["$$user.userId", user.userId] },
|
cond: { $in: ["$$user.userId", filterValues] },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{ $match: { "taggedUsers.0": { $exists: true } } },
|
{ $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([
|
const taskList = await taskModel.aggregate([
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ export async function listNotifications(
|
|||||||
const page = params.page || 1;
|
const page = params.page || 1;
|
||||||
const pageSize = params.pageSize || 10;
|
const pageSize = params.pageSize || 10;
|
||||||
const sortObj = getSortObject(params, notificationFields);
|
const sortObj = getSortObject(params, notificationFields);
|
||||||
const filterObj = getFilterObject(params) || [];
|
let filterObj = getFilterObject(params) || [];
|
||||||
|
|
||||||
filterObj.forEach((item) => {
|
filterObj.forEach((item) => {
|
||||||
if (item.changes) {
|
if (item.changes) {
|
||||||
@@ -125,8 +125,20 @@ export async function listNotifications(
|
|||||||
filterObj.push({ client: new mongoose.Types.ObjectId(user.orgId) });
|
filterObj.push({ client: new mongoose.Types.ObjectId(user.orgId) });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const taggedUserFilterIndex = filterObj.findIndex((item) =>
|
||||||
|
Object.keys(item).includes("taggedUsers")
|
||||||
|
);
|
||||||
|
|
||||||
let taggedFilter = [];
|
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 = [
|
taggedFilter = [
|
||||||
{
|
{
|
||||||
$addFields: {
|
$addFields: {
|
||||||
@@ -134,14 +146,16 @@ export async function listNotifications(
|
|||||||
$filter: {
|
$filter: {
|
||||||
input: "$taggedUsers",
|
input: "$taggedUsers",
|
||||||
as: "user",
|
as: "user",
|
||||||
cond: { $eq: ["$$user.userId", user.userId] },
|
cond: { $in: ["$$user.userId", filterValues] },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{ $match: { "taggedUsers.0": { $exists: true } } },
|
{ $match: { "taggedUsers.0": { $exists: true } } },
|
||||||
{ $sort: { "taggedUsers.taggedAt": sortObj.taggedUsers } },
|
{ $sort: { "taggedUsers.taggedAt": sortObj.taggedUsers ?? -1 } },
|
||||||
];
|
];
|
||||||
|
|
||||||
|
filterObj.splice(taggedUserFilterIndex, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
const pipeline: any = [
|
const pipeline: any = [
|
||||||
|
|||||||
@@ -66,14 +66,26 @@ export async function listPermits(
|
|||||||
const page = params.page || 1;
|
const page = params.page || 1;
|
||||||
const pageSize = params.pageSize || 10;
|
const pageSize = params.pageSize || 10;
|
||||||
const sortObj = getSortObject(params, permitFields);
|
const sortObj = getSortObject(params, permitFields);
|
||||||
const filterObj = getFilterObject(params) || [];
|
let filterObj = getFilterObject(params) || [];
|
||||||
|
|
||||||
if (user.role == "client") {
|
if (user.role == "client") {
|
||||||
filterObj.push({ client: new mongoose.Types.ObjectId(user.orgId) });
|
filterObj.push({ client: new mongoose.Types.ObjectId(user.orgId) });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const taggedUserFilterIndex = filterObj.findIndex((item) =>
|
||||||
|
Object.keys(item).includes("taggedUsers")
|
||||||
|
);
|
||||||
|
|
||||||
let taggedFilter = [];
|
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 = [
|
taggedFilter = [
|
||||||
{
|
{
|
||||||
$addFields: {
|
$addFields: {
|
||||||
@@ -81,14 +93,16 @@ export async function listPermits(
|
|||||||
$filter: {
|
$filter: {
|
||||||
input: "$taggedUsers",
|
input: "$taggedUsers",
|
||||||
as: "user",
|
as: "user",
|
||||||
cond: { $eq: ["$$user.userId", user.userId] },
|
cond: { $in: ["$$user.userId", filterValues] },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{ $match: { "taggedUsers.0": { $exists: true } } },
|
{ $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([
|
const permitsList = await permitModel.aggregate([
|
||||||
|
|||||||
@@ -65,14 +65,26 @@ export async function listProcessedPermits(
|
|||||||
const page = params.page || 1;
|
const page = params.page || 1;
|
||||||
const pageSize = params.pageSize || 10;
|
const pageSize = params.pageSize || 10;
|
||||||
const sortObj = getSortObject(params, processedFields);
|
const sortObj = getSortObject(params, processedFields);
|
||||||
const filterObj = getFilterObject(params) || [];
|
let filterObj = getFilterObject(params) || [];
|
||||||
|
|
||||||
if (user.role == "client") {
|
if (user.role == "client") {
|
||||||
filterObj.push({ client: new mongoose.Types.ObjectId(user.orgId) });
|
filterObj.push({ client: new mongoose.Types.ObjectId(user.orgId) });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const taggedUserFilterIndex = filterObj.findIndex((item) =>
|
||||||
|
Object.keys(item).includes("taggedUsers")
|
||||||
|
);
|
||||||
|
|
||||||
let taggedFilter = [];
|
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 = [
|
taggedFilter = [
|
||||||
{
|
{
|
||||||
$addFields: {
|
$addFields: {
|
||||||
@@ -80,14 +92,16 @@ export async function listProcessedPermits(
|
|||||||
$filter: {
|
$filter: {
|
||||||
input: "$taggedUsers",
|
input: "$taggedUsers",
|
||||||
as: "user",
|
as: "user",
|
||||||
cond: { $eq: ["$$user.userId", user.userId] },
|
cond: { $in: ["$$user.userId", filterValues] },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{ $match: { "taggedUsers.0": { $exists: true } } },
|
{ $match: { "taggedUsers.0": { $exists: true } } },
|
||||||
{ $sort: { "taggedUsers.taggedAt": sortObj.taggedUsers } },
|
{ $sort: { "taggedUsers.taggedAt": sortObj.taggedUsers ?? -1 } },
|
||||||
];
|
];
|
||||||
|
|
||||||
|
filterObj.splice(taggedUserFilterIndex, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
const pipeline: any = [
|
const pipeline: any = [
|
||||||
|
|||||||
@@ -72,14 +72,26 @@ export async function listRts(
|
|||||||
const page = params.page || 1;
|
const page = params.page || 1;
|
||||||
const pageSize = params.pageSize || 10;
|
const pageSize = params.pageSize || 10;
|
||||||
const sortObj = getSortObject(params, rtsFields);
|
const sortObj = getSortObject(params, rtsFields);
|
||||||
const filterObj = getFilterObject(params) || [];
|
let filterObj = getFilterObject(params) || [];
|
||||||
|
|
||||||
if (user.role === "client") {
|
if (user.role === "client") {
|
||||||
filterObj.push({ client: new mongoose.Types.ObjectId(user.orgId) });
|
filterObj.push({ client: new mongoose.Types.ObjectId(user.orgId) });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const taggedUserFilterIndex = filterObj.findIndex((item) =>
|
||||||
|
Object.keys(item).includes("taggedUsers")
|
||||||
|
);
|
||||||
|
|
||||||
let taggedFilter = [];
|
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 = [
|
taggedFilter = [
|
||||||
{
|
{
|
||||||
$addFields: {
|
$addFields: {
|
||||||
@@ -87,14 +99,16 @@ export async function listRts(
|
|||||||
$filter: {
|
$filter: {
|
||||||
input: "$taggedUsers",
|
input: "$taggedUsers",
|
||||||
as: "user",
|
as: "user",
|
||||||
cond: { $eq: ["$$user.userId", user.userId] },
|
cond: { $in: ["$$user.userId", filterValues] },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{ $match: { "taggedUsers.0": { $exists: true } } },
|
{ $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([
|
const rtsList = await rtsModel.aggregate([
|
||||||
|
|||||||
@@ -88,10 +88,22 @@ export async function listTasks(
|
|||||||
const page = params.page || 1;
|
const page = params.page || 1;
|
||||||
const pageSize = params.pageSize || 10;
|
const pageSize = params.pageSize || 10;
|
||||||
const sortObj = getSortObject(params, taskFields);
|
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 = [];
|
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 = [
|
taggedFilter = [
|
||||||
{
|
{
|
||||||
$addFields: {
|
$addFields: {
|
||||||
@@ -99,14 +111,16 @@ export async function listTasks(
|
|||||||
$filter: {
|
$filter: {
|
||||||
input: "$taggedUsers",
|
input: "$taggedUsers",
|
||||||
as: "user",
|
as: "user",
|
||||||
cond: { $eq: ["$$user.userId", user.userId] },
|
cond: { $in: ["$$user.userId", filterValues] },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{ $match: { "taggedUsers.0": { $exists: true } } },
|
{ $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([
|
const taskList = await taskModel.aggregate([
|
||||||
|
|||||||
Reference in New Issue
Block a user