feat(settings): support dynamic number of SMS template variables

This commit is contained in:
2026-08-15 21:58:10 +03:30
parent 9472537536
commit d2d4ee719b
3 changed files with 168 additions and 66 deletions
+37 -6
View File
@@ -15,6 +15,11 @@ const resolveUserIdByPhone = async (phoneNumber) => {
const sendAccountCreatedSms = async (receiver, username, password, userId = null) => {
const resolvedUserId = userId || await resolveUserIdByPhone(receiver);
let fullName = '';
if (resolvedUserId) {
const user = await User.findById(resolvedUserId).select('name').lean();
if (user?.name) fullName = user.name;
}
const { templateId, variables } = await getSmsTemplate('accountCreated');
return recordAndSend({
userId: resolvedUserId,
@@ -24,13 +29,22 @@ const sendAccountCreatedSms = async (receiver, username, password, userId = null
relatedEvent: 'user.created',
sendFn: () => sendSingleSms(receiver, templateId, buildSmsParameters(variables, {
username,
password
password,
fullName: fullName || username,
name: fullName || username,
phoneNumber: receiver,
mobile: receiver
}))
});
};
const sendClassRegisteredSms = async (receiver, className, userId = null) => {
const sendClassRegisteredSms = async (receiver, className, userId = null, extraContext = {}) => {
const resolvedUserId = userId || await resolveUserIdByPhone(receiver);
let fullName = extraContext.fullName || '';
if (!fullName && resolvedUserId) {
const user = await User.findById(resolvedUserId).select('name').lean();
if (user?.name) fullName = user.name;
}
const { templateId, variables } = await getSmsTemplate('classRegistered');
return recordAndSend({
userId: resolvedUserId,
@@ -39,13 +53,23 @@ const sendClassRegisteredSms = async (receiver, className, userId = null) => {
body: `ثبت‌نام شما در کلاس «${className}» انجام شد.`,
relatedEvent: 'user.enrolled',
sendFn: () => sendSingleSms(receiver, templateId, buildSmsParameters(variables, {
className
className,
courseName: extraContext.courseName || className,
fullName: fullName || 'کارآموز',
phoneNumber: receiver,
mobile: receiver,
...extraContext
}))
});
};
const sendClassReminderSms = async (receiver, className, time, place = '', userId = null) => {
const sendClassReminderSms = async (receiver, className, time, place = '', userId = null, extraContext = {}) => {
const resolvedUserId = userId || await resolveUserIdByPhone(receiver);
let fullName = extraContext.fullName || '';
if (!fullName && resolvedUserId) {
const user = await User.findById(resolvedUserId).select('name').lean();
if (user?.name) fullName = user.name;
}
const { templateId, variables } = await getSmsTemplate('classReminder');
return recordAndSend({
userId: resolvedUserId,
@@ -55,8 +79,13 @@ const sendClassReminderSms = async (receiver, className, time, place = '', userI
relatedEvent: 'session.reminder',
sendFn: () => sendSingleSms(receiver, templateId, buildSmsParameters(variables, {
className,
courseName: extraContext.courseName || className,
time,
place: place || '-'
place: place || '-',
fullName: fullName || 'کارآموز',
phoneNumber: receiver,
mobile: receiver,
...extraContext
}))
});
};
@@ -90,7 +119,9 @@ const sendInvoiceCreatedSms = async (receiver, payload, userId = null) => {
sendFn: () => sendSingleSms(receiver, templateId, buildSmsParameters(variables, {
fullName: fullNameLabel,
amount: amountLabel,
course: courseLabel
course: courseLabel,
phoneNumber: receiver,
mobile: receiver
}))
});
};