Initial commit: teaching institution management API.
Express/MongoDB backend with JWT auth, RBAC, S3 uploads, notifications, and scheduled jobs.
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
// /utils/senders/sms.base.js
|
||||
'use strict';
|
||||
|
||||
const axios = require('axios');
|
||||
const config = require('../../config/config');
|
||||
const logger = require('../logger');
|
||||
|
||||
const toBoolean = (value) => {
|
||||
if (typeof value === 'boolean') return value;
|
||||
if (value == null) return false;
|
||||
const normalized = String(value).trim().toLowerCase();
|
||||
return ['true', '1', 'yes', 'on'].includes(normalized);
|
||||
};
|
||||
|
||||
const sendSingleSms = async (mobile, templateId, params = []) => {
|
||||
console.log('[SMS] About to send notification:', {
|
||||
mobile,
|
||||
templateId,
|
||||
params,
|
||||
SMS_ENABLED: config.SMS_ENABLED,
|
||||
});
|
||||
|
||||
if (!toBoolean(config.SMS_ENABLED)) {
|
||||
logger.info(`[SMS] Skipped (SMS_ENABLED=false) → ${mobile} template=${templateId}`);
|
||||
return { skipped: true };
|
||||
}
|
||||
|
||||
if (!templateId) {
|
||||
logger.warn(`[SMS] Missing templateId for ${mobile}`);
|
||||
return { skipped: true, reason: 'missing_template' };
|
||||
}
|
||||
|
||||
if (!mobile) {
|
||||
logger.warn('[SMS] Missing mobile number');
|
||||
return { skipped: true, reason: 'missing_mobile' };
|
||||
}
|
||||
|
||||
const request = {
|
||||
method: 'POST',
|
||||
url: 'https://api.sms.ir/v1/send/verify',
|
||||
headers: {
|
||||
'X-API-KEY': config.SMS_PANEL_TOKEN,
|
||||
Accept: 'application/json',
|
||||
},
|
||||
data: {
|
||||
mobile,
|
||||
templateId: Number(templateId) || templateId,
|
||||
parameters: params,
|
||||
},
|
||||
};
|
||||
|
||||
try {
|
||||
const result = await axios(request);
|
||||
logger.info(`[SMS] Sent to ${mobile} template=${templateId}`);
|
||||
return result.data;
|
||||
} catch (err) {
|
||||
logger.error(`[SMS] Failed to ${mobile}: ${err.response?.data?.message || err.message}`);
|
||||
throw err;
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = { sendSingleSms, toBoolean };
|
||||
Reference in New Issue
Block a user