diff --git a/src/notification/notification.controller.ts b/src/notification/notification.controller.ts index 908067c..5b52b85 100644 --- a/src/notification/notification.controller.ts +++ b/src/notification/notification.controller.ts @@ -50,7 +50,7 @@ export async function updateNotificationHandler( const updatedNotification = await updateNotification( notifId, input, - req.user.tenantId + req.user ); if (!updatedNotification) diff --git a/src/notification/notification.service.ts b/src/notification/notification.service.ts index a578157..659d9eb 100644 --- a/src/notification/notification.service.ts +++ b/src/notification/notification.service.ts @@ -10,6 +10,8 @@ import { notificationModel, UpdateNotificationInput, } from "./notification.schema"; +import { getUser } from "../user/user.service"; +import { createNote } from "../note/note.service"; export async function createNotification( input: CreateNotificationInput, @@ -30,11 +32,11 @@ export async function createNotification( export async function updateNotification( notifId: string, input: UpdateNotificationInput, - tenantId: string + user: AuthenticatedUser ) { - return await notificationModel + const updateNotificationResult = await notificationModel .findOneAndUpdate( - { $and: [{ tenantId: tenantId }, { pid: notifId }] }, + { $and: [{ tenantId: user.tenantId }, { pid: notifId }] }, { ...input, updatedAt: new Date(), @@ -42,6 +44,35 @@ export async function updateNotification( { new: true } ) .populate({ path: "assignedTo", select: "pid name avatar" }); + + if (updateNotificationResult) { + for (const key in input) { + if (["status", "assignedTo"].includes(key)) { + let msg = ""; + + if (input[key] === null) { + msg = `Cleared ${key}`; + } else if (key == "assignedTo") { + const user = await getUser(input.assignedTo); + if (!user) continue; + + msg = `Assigned to ${user.firstName + " " + user.lastName}`; + } else { + msg = `Updated ${key} to '${input[key]}'`; + } + + await createNote( + { + content: msg, + }, + notifId, + user + ); + } + } + } + + return updateNotificationResult; } export async function listNotifications( diff --git a/src/permit/permit.service.ts b/src/permit/permit.service.ts index 23e38bc..af12fa5 100644 --- a/src/permit/permit.service.ts +++ b/src/permit/permit.service.ts @@ -11,6 +11,8 @@ import { permitPipeline } from "../utils/pipeline"; import { AuthenticatedUser } from "../auth"; import mongoose from "mongoose"; import { noteModel } from "../note/note.schema"; +import { getUser } from "../user/user.service"; +import { createNote } from "../note/note.service"; export async function createPermit( input: CreatePermitInput, @@ -181,15 +183,27 @@ export async function updatePermit( if (updatePermitResult) { for (const key in input) { - if (["manualStatus", "utility"].includes(key)) { - await noteModel.create({ - tenantId: user.tenantId, - pid: generateId(), - resourceId: permitId, - content: `Updated ${key} to '${input[key]}'`, - createdAt: new Date(), - createdBy: user.userId, - }); + if (["manualStatus", "utility", "assignedTo"].includes(key)) { + let msg = ""; + + if (input[key] === null) { + msg = `Cleared ${key}`; + } else if (key == "assignedTo") { + const user = await getUser(input.assignedTo); + if (!user) continue; + + msg = `Assigned to ${user.firstName + " " + user.lastName}`; + } else { + msg = `Updated ${key} to '${input[key]}'`; + } + + await createNote( + { + content: msg, + }, + permitId, + user + ); } } diff --git a/src/processed/processed.service.ts b/src/processed/processed.service.ts index f8407e6..9150bf1 100644 --- a/src/processed/processed.service.ts +++ b/src/processed/processed.service.ts @@ -8,6 +8,7 @@ import { processedModel, UpdateProcessedInput, } from "./processed.schema"; +import { createNote } from "../note/note.service"; export async function getProcessedPermit(permitId: String, tenantId: String) { return await processedModel.findOne({ @@ -20,7 +21,7 @@ export async function updateProcessed( permitId: string, user: AuthenticatedUser ) { - return await processedModel + const updateProcessedResult = await processedModel .findOneAndUpdate( { $and: [{ tenantId: user.tenantId }, { pid: permitId }], @@ -32,6 +33,30 @@ export async function updateProcessed( .populate({ path: "client", select: "pid name avatar" }) .populate({ path: "assignedTo", select: "pid name avatar" }) .populate({ path: "createdBy", select: "pid name avatar" }); + + if (updateProcessedResult) { + for (const key in input) { + if (["manualStatus", "utility"].includes(key)) { + let msg = ""; + + if (input[key] === null) { + msg = `Cleared ${key}`; + } else { + msg = `Updated ${key} to '${input[key]}'`; + } + + await createNote( + { + content: msg, + }, + permitId, + user + ); + } + } + + return updateProcessedResult; + } } export async function listProcessedPermits(