feat: add tagging alerts and sorting on tags

This commit is contained in:
2025-08-19 08:03:44 +05:30
parent 17a63f67a5
commit caea0e60e6
20 changed files with 260 additions and 49 deletions

View File

@@ -1,7 +1,7 @@
import z from 'zod';
import mongoose from 'mongoose';
import { pageQueryParams } from '../pagination';
import { buildJsonSchemas } from 'fastify-zod';
import z from "zod";
import mongoose from "mongoose";
import { pageQueryParams } from "../pagination";
import { buildJsonSchemas } from "fastify-zod";
const processedSchema = new mongoose.Schema({
tenantId: {
@@ -16,7 +16,7 @@ const processedSchema = new mongoose.Schema({
county: Object,
client: {
type: mongoose.Types.ObjectId,
ref: 'organization',
ref: "organization",
},
clientData: Object,
permitDate: Date,
@@ -34,7 +34,7 @@ const processedSchema = new mongoose.Schema({
utility: String,
assignedTo: {
type: mongoose.Types.ObjectId,
ref: 'user',
ref: "user",
},
link: String,
address: Object,
@@ -52,7 +52,7 @@ const processedSchema = new mongoose.Schema({
createdAt: Date,
createdBy: {
type: mongoose.Types.ObjectId,
ref: 'user',
ref: "user",
},
newProcessingStatus: Array,
newPayment: Array,
@@ -71,16 +71,17 @@ const processedSchema = new mongoose.Schema({
jobNumber: String,
transferDate: Date,
history: Array,
taggedUsers: Array,
}).index({ tenantId: 1, permitNumber: 1 }, { unique: true });
export const processedFields = Object.keys(processedSchema.paths).filter(
(path) => path !== '__v'
(path) => path !== "__v"
);
export const processedModel = mongoose.model(
'processed',
"processed",
processedSchema,
'processed'
"processed"
);
const updateProcessedInput = z.object({
@@ -100,5 +101,5 @@ export const { schemas: processedSchemas, $ref: $processed } = buildJsonSchemas(
pageQueryParams,
updateProcessedInput,
},
{ $id: 'processed' }
{ $id: "processed" }
);

View File

@@ -48,6 +48,7 @@ export async function updateProcessed(
content: msg,
},
permitId,
"processed",
user
);
}
@@ -70,6 +71,25 @@ export async function listProcessedPermits(
filterObj.push({ client: new mongoose.Types.ObjectId(user.orgId) });
}
let taggedFilter = [];
if (sortObj.taggedUsers) {
taggedFilter = [
{
$addFields: {
taggedUsers: {
$filter: {
input: "$taggedUsers",
as: "user",
cond: { $eq: ["$$user.userId", user.userId] },
},
},
},
},
{ $match: { "taggedUsers.0": { $exists: true } } },
{ $sort: { "taggedUsers.taggedAt": sortObj.taggedUsers } },
];
}
const pipeline: any = [
{
$match: { $and: [{ tenantId: user.tenantId }, ...filterObj] },
@@ -91,6 +111,7 @@ export async function listProcessedPermits(
pipeline.push(
...[
...taggedFilter,
{
$lookup: {
from: "users",