Express/MongoDB backend with JWT auth, RBAC, S3 uploads, notifications, and scheduled jobs.
65 lines
2.3 KiB
JavaScript
65 lines
2.3 KiB
JavaScript
// /utils/senders/smsMessages.js
|
|
'use strict';
|
|
|
|
const config = require('../../config/config');
|
|
const { sendSingleSms } = require('./sms.base');
|
|
const { recordAndSend } = require('./notificationRecorder');
|
|
const User = require('../../components/users/userModel');
|
|
|
|
const resolveUserIdByPhone = async (phoneNumber) => {
|
|
if (!phoneNumber) return null;
|
|
const user = await User.findOne({ phoneNumber: String(phoneNumber) }).select('_id').lean();
|
|
return user?._id || null;
|
|
};
|
|
|
|
const sendAccountCreatedSms = async (receiver, username, password) => {
|
|
const userId = await resolveUserIdByPhone(receiver);
|
|
return recordAndSend({
|
|
userId,
|
|
channel: 'sms',
|
|
subject: 'ایجاد حساب کاربری',
|
|
body: `حساب کاربری شما ایجاد شد. نام کاربری: ${username}`,
|
|
relatedEvent: 'user.created',
|
|
sendFn: () => sendSingleSms(receiver, config.SMS_TEMPLATE_ACCOUNT_CREATED, [
|
|
{ name: 'username', value: String(username) },
|
|
{ name: 'password', value: String(password) }
|
|
])
|
|
});
|
|
};
|
|
|
|
const sendClassRegisteredSms = async (receiver, className, userId = null) => {
|
|
const resolvedUserId = userId || await resolveUserIdByPhone(receiver);
|
|
return recordAndSend({
|
|
userId: resolvedUserId,
|
|
channel: 'sms',
|
|
subject: 'ثبتنام در کلاس',
|
|
body: `ثبتنام شما در کلاس «${className}» انجام شد.`,
|
|
relatedEvent: 'user.enrolled',
|
|
sendFn: () => sendSingleSms(receiver, config.SMS_TEMPLATE_CLASS_REGISTERED, [
|
|
{ name: 'className', value: String(className) }
|
|
])
|
|
});
|
|
};
|
|
|
|
const sendClassReminderSms = async (receiver, className, time, place = '', userId = null) => {
|
|
const resolvedUserId = userId || await resolveUserIdByPhone(receiver);
|
|
return recordAndSend({
|
|
userId: resolvedUserId,
|
|
channel: 'sms',
|
|
subject: 'یادآوری کلاس',
|
|
body: `یادآوری کلاس «${className}» ساعت ${time} — مکان: ${place || '-'}`,
|
|
relatedEvent: 'session.reminder',
|
|
sendFn: () => sendSingleSms(receiver, config.SMS_TEMPLATE_CLASS_REMINDER, [
|
|
{ name: 'className', value: String(className) },
|
|
{ name: 'time', value: String(time) },
|
|
{ name: 'place', value: String(place || '-') }
|
|
])
|
|
});
|
|
};
|
|
|
|
module.exports = {
|
|
sendAccountCreatedSms,
|
|
sendClassRegisteredSms,
|
|
sendClassReminderSms
|
|
};
|