feat(professors,sms): merge professor with users, add existing user link, professor portal endpoint, and SMS bypass list

This commit is contained in:
2026-08-25 03:48:19 +03:30
parent b708a6b777
commit 0a022c0917
14 changed files with 865 additions and 205 deletions
+2 -1
View File
@@ -22,7 +22,7 @@ const redactSmsParams = (params = []) => (
);
const sendSingleSms = async (mobile, templateId, params = []) => {
const channelState = await getMessagingChannelState('sms');
const channelState = await getMessagingChannelState('sms', mobile);
logger.info('[SMS] About to send notification:', {
mobile,
@@ -30,6 +30,7 @@ const sendSingleSms = async (mobile, templateId, params = []) => {
params: redactSmsParams(params),
SMS_ENABLED: channelState.envEnabled,
dashboardEnabled: channelState.dbEnabled,
bypassActive: Boolean(channelState.bypass)
});
if (!channelState.enabled) {
+3 -1
View File
@@ -5,6 +5,7 @@ const { sendSingleSms } = require('./sms.base');
const { recordAndSend } = require('./notificationRecorder');
const { getSmsTemplate } = require('../../components/settings/settingService');
const { buildSmsParameters, renderSmsText } = require('../../components/settings/smsTemplates');
const { isSmsBypassNumber } = require('../../components/settings/messagingFlags');
const User = require('../../components/users/userModel');
const logger = require('../logger');
@@ -34,7 +35,8 @@ const sendTemplateSms = async ({
}) => {
const resolvedUserId = userId || await resolveUserIdByPhone(receiver);
const { templateId, variables, enabled, text: templateText } = await getSmsTemplate(templateKey);
if (enabled === false) {
const isBypass = await isSmsBypassNumber(receiver);
if (enabled === false && !isBypass) {
logger.info(`[SMS] Template ${templateKey} is disabled. Skipping SMS send to ${receiver}.`);
return { success: true, skipped: true, reason: 'template_disabled' };
}