Add sessionHolding template, unique 8-digit codes, reason slot for sessionCancelled, and disable unused notifications
This commit is contained in:
@@ -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)
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user