feat: add team alerts

This commit is contained in:
2026-01-19 11:56:32 +05:30
parent 46c07e23ad
commit c10b3629fc
9 changed files with 226 additions and 70 deletions

View File

@@ -19,7 +19,7 @@ import { arrayDiff } from "../utils/diff";
export async function getProcessedPermit(
permitId: String,
user: AuthenticatedUser
user: AuthenticatedUser,
) {
const permit = await processedModel
.findOne({
@@ -41,11 +41,19 @@ export async function getProcessedPermit(
export async function updateProcessed(
input: UpdateProcessedInput,
permitId: string,
user: AuthenticatedUser
user: AuthenticatedUser,
) {
if (input.assignedToOrg && input.assignedTo) {
input.assignedTo = [];
} else if (input.assignedToOrg) {
input.assignedTo = [];
} else if (input.assignedTo) {
input.assignedToOrg = null;
}
const oldPermitResult = await processedModel.findOne(
{ pid: permitId },
{ assignedTo: 1 }
{ assignedTo: 1, assignedToOrg: 1 },
);
const updateProcessedResult = await processedModel
.findOneAndUpdate(
@@ -53,7 +61,7 @@ export async function updateProcessed(
$and: [{ tenantId: user.tenantId }, { pid: permitId }],
},
{ ...input, lastUpdateDate: new Date() },
{ new: true }
{ new: true },
)
.populate({ path: "county", select: "pid name avatar" })
.populate({ path: "assignedTo", select: "pid name avatar" })
@@ -76,7 +84,7 @@ export async function updateProcessed(
},
permitId,
"processed",
user
user,
);
} else if (key == "client") {
const orgInDb = await orgModel.findById(input.client);
@@ -97,13 +105,13 @@ export async function updateProcessed(
},
permitId,
"permits",
user
user,
);
}
} else if (key == "assignedTo") {
const newAssignees = arrayDiff(
updateProcessedResult.assignedTo.map((item) => item._id),
oldPermitResult.assignedTo
oldPermitResult.assignedTo,
);
if (newAssignees.length == 0) continue;
@@ -127,7 +135,7 @@ export async function updateProcessed(
client: updateProcessedResult.client.toString(),
county: updateProcessedResult.county.id.toString(),
address: updateProcessedResult.address.full_address,
}
},
);
}
@@ -137,7 +145,33 @@ export async function updateProcessed(
},
permitId,
"processed",
user
user,
);
} else if (key == "assignedToOrg") {
if (
oldPermitResult.assignedToOrg == updateProcessedResult.assignedToOrg
)
continue;
const orgName =
input.assignedToOrg == "agent"
? "Suncoast"
: updateProcessedResult.clientData.name;
await createAlert(
user.tenantId,
`${orgName} assigned to ${updateProcessedResult.permitNumber}`,
"team",
input.assignedToOrg == "client"
? updateProcessedResult.client.toString()
: process.env.SUNCOAST_ID,
updateProcessedResult.pid,
"permits",
{
client: updateProcessedResult.client.toString(),
county: updateProcessedResult.county.id.toString(),
address: updateProcessedResult.address.full_address,
},
);
}
}
@@ -148,7 +182,7 @@ export async function updateProcessed(
export async function listProcessedPermits(
params: PageQueryParams,
user: AuthenticatedUser
user: AuthenticatedUser,
) {
const page = params.page || 1;
const pageSize = params.pageSize || 10;
@@ -173,7 +207,7 @@ export async function listProcessedPermits(
let { taggedFilter, taggedUserFilterIndex } = getTaggedUsersFilter(
filterObj,
sortObj
sortObj,
);
if (taggedUserFilterIndex != -1) filterObj.splice(taggedUserFilterIndex, 1);
@@ -281,7 +315,7 @@ export async function listProcessedPermits(
],
},
},
]
],
);
const permitsList = await processedModel.aggregate(pipeline);