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