// /utils/senders/smsMessages.js 'use strict'; const { sendSingleSms } = require('./sms.base'); const { recordAndSend } = require('./notificationRecorder'); const { getSmsTemplate } = require('../../components/settings/settingService'); const { buildSmsParameters } = require('../../components/settings/smsTemplates'); 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, userId = null) => { const resolvedUserId = userId || await resolveUserIdByPhone(receiver); const { templateId, variables } = await getSmsTemplate('accountCreated'); return recordAndSend({ userId: resolvedUserId, channel: 'sms', subject: 'ایجاد حساب کاربری', body: `حساب کاربری شما ایجاد شد. نام کاربری: ${username}`, relatedEvent: 'user.created', sendFn: () => sendSingleSms(receiver, templateId, buildSmsParameters(variables, { username, password })) }); }; const sendClassRegisteredSms = async (receiver, className, userId = null) => { const resolvedUserId = userId || await resolveUserIdByPhone(receiver); const { templateId, variables } = await getSmsTemplate('classRegistered'); return recordAndSend({ userId: resolvedUserId, channel: 'sms', subject: 'ثبت‌نام در کلاس', body: `ثبت‌نام شما در کلاس «${className}» انجام شد.`, relatedEvent: 'user.enrolled', sendFn: () => sendSingleSms(receiver, templateId, buildSmsParameters(variables, { className })) }); }; const sendClassReminderSms = async (receiver, className, time, place = '', userId = null) => { const resolvedUserId = userId || await resolveUserIdByPhone(receiver); const { templateId, variables } = await getSmsTemplate('classReminder'); return recordAndSend({ userId: resolvedUserId, channel: 'sms', subject: 'یادآوری کلاس', body: `یادآوری کلاس «${className}» ساعت ${time} — مکان: ${place || '-'}`, relatedEvent: 'session.reminder', sendFn: () => sendSingleSms(receiver, templateId, buildSmsParameters(variables, { className, time, place: place || '-' })) }); }; const sendInvoiceCreatedSms = async (receiver, amount, userId = null) => { const resolvedUserId = userId || await resolveUserIdByPhone(receiver); const { templateId, variables } = await getSmsTemplate('invoiceCreated'); const amountLabel = String(amount); return recordAndSend({ userId: resolvedUserId, channel: 'sms', subject: 'ایجاد صورتحساب', body: `صورتحساب جدید به مبلغ ${amountLabel} تومان صادر شد.`, relatedEvent: 'payment.created', sendFn: () => sendSingleSms(receiver, templateId, buildSmsParameters(variables, { amount: amountLabel })) }); }; module.exports = { sendAccountCreatedSms, sendClassRegisteredSms, sendClassReminderSms, sendInvoiceCreatedSms };