added array filter option

This commit is contained in:
2025-05-03 18:13:31 +05:30
parent 5800069e6b
commit dbc82f53a3
9 changed files with 202 additions and 174 deletions

View File

@@ -1,14 +1,14 @@
import { AuthenticatedUser } from '../auth';
import { getFilterObject, getSortObject, PageQueryParams } from '../pagination';
import { generateId } from '../utils/id';
import { taskPipeline } from '../utils/pipeline';
import { AuthenticatedUser } from "../auth";
import { getFilterObject, getSortObject, PageQueryParams } from "../pagination";
import { generateId } from "../utils/id";
import { taskPipeline } from "../utils/pipeline";
import {
CreateTaskInput,
taskFields,
taskModel,
UpdateTaskInput,
UploadTaskInput,
} from './task.schema';
} from "./task.schema";
export async function createTask(
input: CreateTaskInput,
@@ -31,8 +31,8 @@ export async function createTask(
return await taskModel
.findOne({ pid: task.pid })
.populate({ path: 'createdBy', select: 'pid name avatar' })
.populate({ path: 'assignedTo', select: 'pid name avatar' });
.populate({ path: "createdBy", select: "pid name avatar" })
.populate({ path: "assignedTo", select: "pid name avatar" });
}
export async function updateTask(
@@ -42,8 +42,8 @@ export async function updateTask(
) {
const updatedTask = await taskModel
.findOneAndUpdate({ tenantId: tenantId, pid: taskId }, input, { new: true })
.populate({ path: 'createdBy', select: 'pid name avatar' })
.populate({ path: 'assignedTo', select: 'pid name avatar' });
.populate({ path: "createdBy", select: "pid name avatar" })
.populate({ path: "assignedTo", select: "pid name avatar" });
return updatedTask;
}
@@ -51,8 +51,8 @@ export async function updateTask(
export async function getTask(taskId: string, tenantId: string) {
return await taskModel
.findOne({ tenantId: tenantId, pid: taskId })
.populate({ path: 'createdBy', select: 'pid name avatar' })
.populate({ path: 'assignedTo', select: 'pid name avatar' });
.populate({ path: "createdBy", select: "pid name avatar" })
.populate({ path: "assignedTo", select: "pid name avatar" });
}
export async function listTasks(params: PageQueryParams, tenantId: string) {
@@ -63,22 +63,22 @@ export async function listTasks(params: PageQueryParams, tenantId: string) {
const taskList = await taskModel.aggregate([
{
$match: { $and: [{ tenantId: tenantId }, { ...filterObj }] },
$match: { $and: [{ tenantId: tenantId }, ...filterObj] },
},
{
$lookup: {
from: 'users',
localField: 'createdBy',
foreignField: '_id',
as: 'createdBy',
from: "users",
localField: "createdBy",
foreignField: "_id",
as: "createdBy",
},
},
{
$lookup: {
from: 'users',
localField: 'assignedTo',
foreignField: '_id',
as: 'assignedTo',
from: "users",
localField: "assignedTo",
foreignField: "_id",
as: "assignedTo",
},
},
{
@@ -92,21 +92,21 @@ export async function listTasks(params: PageQueryParams, tenantId: string) {
createdAt: 1,
createdBy: {
$let: {
vars: { createdBy: { $arrayElemAt: ['$createdBy', 0] } },
vars: { createdBy: { $arrayElemAt: ["$createdBy", 0] } },
in: {
_id: '$$createdBy._id',
pid: '$$createdBy.pid',
name: '$$createdBy.name',
_id: "$$createdBy._id",
pid: "$$createdBy.pid",
name: "$$createdBy.name",
},
},
},
assignedTo: {
$let: {
vars: { assignedTo: { $arrayElemAt: ['$assignedTo', 0] } },
vars: { assignedTo: { $arrayElemAt: ["$assignedTo", 0] } },
in: {
_id: '$$assignedTo._id',
pid: '$$assignedTo.pid',
name: '$$assignedTo.name',
_id: "$$assignedTo._id",
pid: "$$assignedTo.pid",
name: "$$assignedTo.name",
},
},
},
@@ -114,7 +114,7 @@ export async function listTasks(params: PageQueryParams, tenantId: string) {
},
{
$facet: {
metadata: [{ $count: 'count' }],
metadata: [{ $count: "count" }],
data: [
{ $sort: sortObj },
{ $skip: (page - 1) * pageSize },
@@ -147,11 +147,11 @@ export async function searchTasks(params: PageQueryParams, tenantId: string) {
const sortObj = getSortObject(params, taskFields);
const filterObj = getFilterObject(params);
const regex = new RegExp(params.searchToken, 'i');
const regex = new RegExp(params.searchToken, "i");
const taskList = await taskModel.aggregate([
{
$match: { $and: [{ tenantId: tenantId }, { ...filterObj }] },
$match: { $and: [{ tenantId: tenantId }, ...filterObj] },
},
{
$match: {
@@ -160,18 +160,18 @@ export async function searchTasks(params: PageQueryParams, tenantId: string) {
},
{
$lookup: {
from: 'users',
localField: 'createdBy',
foreignField: '_id',
as: 'createdBy',
from: "users",
localField: "createdBy",
foreignField: "_id",
as: "createdBy",
},
},
{
$lookup: {
from: 'users',
localField: 'assignedTo',
foreignField: '_id',
as: 'assignedTo',
from: "users",
localField: "assignedTo",
foreignField: "_id",
as: "assignedTo",
},
},
{
@@ -185,21 +185,21 @@ export async function searchTasks(params: PageQueryParams, tenantId: string) {
createdAt: 1,
createdBy: {
$let: {
vars: { createdBy: { $arrayElemAt: ['$createdBy', 0] } },
vars: { createdBy: { $arrayElemAt: ["$createdBy", 0] } },
in: {
_id: '$$createdBy._id',
pid: '$$createdBy.pid',
name: '$$createdBy.name',
_id: "$$createdBy._id",
pid: "$$createdBy.pid",
name: "$$createdBy.name",
},
},
},
assignedTo: {
$let: {
vars: { assignedTo: { $arrayElemAt: ['$assignedTo', 0] } },
vars: { assignedTo: { $arrayElemAt: ["$assignedTo", 0] } },
in: {
_id: '$$assignedTo._id',
pid: '$$assignedTo.pid',
name: '$$assignedTo.name',
_id: "$$assignedTo._id",
pid: "$$assignedTo.pid",
name: "$$assignedTo.name",
},
},
},
@@ -207,7 +207,7 @@ export async function searchTasks(params: PageQueryParams, tenantId: string) {
},
{
$facet: {
metadata: [{ $count: 'count' }],
metadata: [{ $count: "count" }],
data: [
{ $sort: sortObj },
{ $skip: (page - 1) * pageSize },