fix: bugs in taggedUsers filter
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import { z } from "zod";
|
||||
import { parse } from "./utils/queryParser";
|
||||
import { MongoFilter, parse } from "./utils/queryParser";
|
||||
|
||||
export const pageMetadata = z.object({
|
||||
count: z.number(),
|
||||
@@ -46,3 +46,51 @@ export function getFilterObject(params: PageQueryParams) {
|
||||
return parsedQuery;
|
||||
}
|
||||
}
|
||||
|
||||
export function getTaggedUsersFilter(
|
||||
filterObj: MongoFilter[],
|
||||
sortObj: Record<string, 1 | -1>
|
||||
) {
|
||||
const taggedUserFilterIndex = filterObj.findIndex((item) =>
|
||||
Object.keys(item).includes("taggedUsers")
|
||||
);
|
||||
|
||||
let taggedFilter = [];
|
||||
if (taggedUserFilterIndex != -1) {
|
||||
const filterItem = filterObj[taggedUserFilterIndex].taggedUsers;
|
||||
let filterValues = null;
|
||||
|
||||
let notFlag = false;
|
||||
if (filterItem["$eq"]) {
|
||||
filterValues = [filterItem["$eq"]];
|
||||
} else if (filterItem["$ne"]) {
|
||||
filterValues = [filterItem["$ne"]];
|
||||
notFlag = true;
|
||||
} else if (filterItem["$in"]) {
|
||||
filterValues = filterItem["$in"];
|
||||
} else {
|
||||
filterValues = filterItem["$nin"];
|
||||
notFlag = true;
|
||||
}
|
||||
|
||||
const condition = notFlag ? { $exists: false } : { $exists: true };
|
||||
|
||||
taggedFilter = [
|
||||
{
|
||||
$addFields: {
|
||||
taggedUsersFilter: {
|
||||
$filter: {
|
||||
input: "$taggedUsers",
|
||||
as: "user",
|
||||
cond: { $in: ["$$user.userId", filterValues] },
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{ $match: { "taggedUsersFilter.0": condition } },
|
||||
{ $sort: { "taggedUsersFilter.taggedAt": sortObj.taggedUsers ?? -1 } },
|
||||
];
|
||||
}
|
||||
|
||||
return { taggedFilter, taggedUserFilterIndex };
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user