From 54ecae5b7b20c93078fe5017b50f83288ed59bf7 Mon Sep 17 00:00:00 2001 From: laxmanhalaki Date: Mon, 10 Nov 2025 20:11:24 +0530 Subject: [PATCH] mention feature added --- src/controllers/worknote.controller.ts | 12 +++++++++- src/services/worknote.service.ts | 31 ++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/controllers/worknote.controller.ts b/src/controllers/worknote.controller.ts index 4083935..68dae8e 100644 --- a/src/controllers/worknote.controller.ts +++ b/src/controllers/worknote.controller.ts @@ -40,7 +40,17 @@ export class WorkNoteController { const payload = req.body?.payload ? JSON.parse(req.body.payload) : (req.body || {}); const files = (req.files as any[])?.map(f => ({ path: f.path, originalname: f.originalname, mimetype: f.mimetype, size: f.size })) || []; - const note = await workNoteService.create(requestId, user, payload, files); + + // Extract mentions from payload (sent by frontend) + const mentions = payload.mentions || []; + const workNotePayload = { + message: payload.message, + isPriority: payload.isPriority, + parentNoteId: payload.parentNoteId, + mentionedUsers: mentions // Pass mentioned user IDs to service + }; + + const note = await workNoteService.create(requestId, user, workNotePayload, files); res.status(201).json({ success: true, data: note }); } } diff --git a/src/services/worknote.service.ts b/src/services/worknote.service.ts index 4ebad39..81f7217 100644 --- a/src/services/worknote.service.ts +++ b/src/services/worknote.service.ts @@ -2,7 +2,9 @@ import { Op } from 'sequelize'; import { WorkNote } from '@models/WorkNote'; import { WorkNoteAttachment } from '@models/WorkNoteAttachment'; import { Participant } from '@models/Participant'; +import { WorkflowRequest } from '@models/WorkflowRequest'; import { activityService } from './activity.service'; +import { notificationService } from './notification.service'; import logger from '@utils/logger'; export class WorkNoteService { @@ -144,6 +146,35 @@ export class WorkNoteService { } } catch (e) { logger.warn('Realtime emit failed (not initialized)'); } + // Send notifications to mentioned users + if (payload.mentionedUsers && Array.isArray(payload.mentionedUsers) && payload.mentionedUsers.length > 0) { + try { + // Get workflow details for request number and title + const workflow = await WorkflowRequest.findOne({ where: { requestId } }); + const requestNumber = (workflow as any)?.requestNumber || requestId; + const requestTitle = (workflow as any)?.title || 'Request'; + + logger.info(`[WorkNote] Sending mention notifications to ${payload.mentionedUsers.length} users`); + + await notificationService.sendToUsers( + payload.mentionedUsers, + { + title: '💬 Mentioned in Work Note', + body: `${user.name || 'Someone'} mentioned you in ${requestNumber}: "${payload.message.substring(0, 50)}${payload.message.length > 50 ? '...' : ''}"`, + requestId, + requestNumber, + url: `/request/${requestNumber}`, + type: 'mention' + } + ); + + logger.info(`[WorkNote] Mention notifications sent successfully`); + } catch (notifyError) { + logger.error('[WorkNote] Failed to send mention notifications:', notifyError); + // Don't fail the work note creation if notifications fail + } + } + return { ...note, attachments }; }