Add sessionHolding template, unique 8-digit codes, reason slot for sessionCancelled, and disable unused notifications

This commit is contained in:
2026-08-21 10:44:51 +03:30
parent 5328f36f06
commit 091e519280
28 changed files with 2180 additions and 280 deletions
+50 -3
View File
@@ -15,6 +15,17 @@ const {
getPublicMessaging,
invalidateMessagingCache
} = require('./messagingFlags');
const {
emptyNotificationSettingsMap,
mergeNotificationSettings,
parseIncomingNotificationSettings,
NOTIFICATION_ACTION_KEYS
} = require('./notificationActions');
const {
getPublicNotificationSettings,
invalidateNotificationSettingsCache,
readStoredMap: readNotificationStoredMap
} = require('../../utils/notificationSettings');
const emptyTemplateMap = () => {
const map = {};
@@ -64,11 +75,33 @@ const toPublicTemplates = (storedMap) => {
};
const getSettings = async () => {
const doc = await Setting.findOne({ key: SETTINGS_KEY }).lean();
let doc = await Setting.findOne({ key: SETTINGS_KEY }).lean();
if (!doc) {
const created = await Setting.create({
key: SETTINGS_KEY,
smsTemplates: emptyTemplateMap(),
notificationSettings: emptyNotificationSettingsMap()
});
doc = created.toObject();
} else {
const mergedNotifications = mergeNotificationSettings(readNotificationStoredMap(doc));
const storedKeys = Object.keys(readNotificationStoredMap(doc));
const missingAction = NOTIFICATION_ACTION_KEYS.some((key) => !storedKeys.includes(key));
if (missingAction || storedKeys.length === 0) {
await Setting.updateOne(
{ key: SETTINGS_KEY },
{ $set: { notificationSettings: mergedNotifications } }
);
doc = { ...doc, notificationSettings: mergedNotifications };
invalidateNotificationSettingsCache();
}
}
const storedMap = readStoredMap(doc);
return {
smsTemplates: toPublicTemplates(storedMap),
messaging: getPublicMessaging(doc)
messaging: getPublicMessaging(doc),
notificationSettings: await getPublicNotificationSettings(doc)
};
};
@@ -150,13 +183,27 @@ const saveSettings = async (body = {}) => {
if (incomingMessaging.botEnabled !== undefined) doc.botEnabled = incomingMessaging.botEnabled;
}
const incomingNotificationSettings = parseIncomingNotificationSettings(body.notificationSettings);
if (incomingNotificationSettings !== undefined) {
const storedNotificationMap = existing
? readNotificationStoredMap(existing.toObject ? existing.toObject() : existing)
: emptyNotificationSettingsMap();
const nextNotificationMap = mergeNotificationSettings(storedNotificationMap, incomingNotificationSettings);
doc.set('notificationSettings', JSON.parse(JSON.stringify(nextNotificationMap)));
doc.markModified('notificationSettings');
} else if (!existing) {
doc.set('notificationSettings', emptyNotificationSettingsMap());
}
await doc.save();
invalidateMessagingCache();
invalidateNotificationSettingsCache();
const saved = await Setting.findOne({ key: SETTINGS_KEY }).lean();
return {
smsTemplates: toPublicTemplates(readStoredMap(saved)),
messaging: getPublicMessaging(saved)
messaging: getPublicMessaging(saved),
notificationSettings: await getPublicNotificationSettings(saved)
};
};