Add sessionHolding template, unique 8-digit codes, reason slot for sessionCancelled, and disable unused notifications
This commit is contained in:
@@ -8,6 +8,9 @@ const config = require('../../config/config');
|
||||
const { commitTempFile, generatePresignedUrl, deleteFromBucket } = require('../../utils/s3Client');
|
||||
const eventEmitter = require('../../events/eventEmitter');
|
||||
const EVENT_NAMES = require('../../constants/eventNames');
|
||||
const { notifyAction } = require('../../utils/actionNotify');
|
||||
const { sendCertificateIssuedSms } = require('../../utils/senders/smsMessages');
|
||||
const Course = require('../courses/courseModel');
|
||||
const { parsePaginationAndSort, buildFilterQuery, calculateMeta } = require('../../utils/pagination');
|
||||
|
||||
const BUCKET = 'certificates';
|
||||
@@ -54,6 +57,30 @@ const createCertificate = async (data) => {
|
||||
|
||||
eventEmitter.emit(EVENT_NAMES.CERTIFICATE_ISSUED, { certificateId: certificate._id, userId: user._id });
|
||||
|
||||
try {
|
||||
let courseName = '';
|
||||
if (certificate.course) {
|
||||
const course = await Course.findById(certificate.course).select('title').lean();
|
||||
courseName = course?.title || '';
|
||||
}
|
||||
await notifyAction({
|
||||
actionKey: 'certificateIssued',
|
||||
userId: user._id,
|
||||
phoneNumber: user.phoneNumber,
|
||||
email: user.email,
|
||||
subject: 'صدور گواهینامه',
|
||||
body: `گواهینامه «${certificate.title}» با کد ${certificate.uniqueCode || ''} صادر شد.`,
|
||||
smsHandler: () => sendCertificateIssuedSms(user.phoneNumber, {
|
||||
fullName: user.name || '',
|
||||
certificateTitle: certificate.title,
|
||||
certificateCode: certificate.uniqueCode || '',
|
||||
courseName
|
||||
}, user._id)
|
||||
});
|
||||
} catch {
|
||||
// Notification failure should not block certificate creation
|
||||
}
|
||||
|
||||
return withAccessUrl(certificate);
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user