Download src/utils/notificationPreferences.js from Mbonea/WifiBiz: direct link, hf CLI and curl.
- Browser
- Download file 4.28 kB
-
https://huggingface.co/spaces/Mbonea/WifiBiz/resolve/main/src/utils/notificationPreferences.js
- Command line
-
hf download hf://spaces/Mbonea/WifiBiz/src/utils/notificationPreferences.js
-
curl -L -o notificationPreferences.js https://huggingface.co/spaces/Mbonea/WifiBiz/resolve/main/src/utils/notificationPreferences.js
4.28 kB
| const db = require('../config/db'); | |
| const DEFAULTS = { | |
| device_renewal: true, | |
| device_suspended: true, | |
| device_paused: true, | |
| billing_reminder: true, | |
| payout_completed: true, | |
| payout_failed: true, | |
| trial_granted: true, | |
| purchase_alerts: true, | |
| system_alerts: true, | |
| }; | |
| const OPTION_DEFS = [ | |
| { | |
| key: 'device_renewal', | |
| label: 'Device renewal', | |
| description: 'Sent when a device subscription payment succeeds and the device is renewed.', | |
| default_enabled: true, | |
| }, | |
| { | |
| key: 'device_suspended', | |
| label: 'Device suspended', | |
| description: 'Sent when a device is suspended because billing expired or admin suspended it.', | |
| default_enabled: true, | |
| }, | |
| { | |
| key: 'device_paused', | |
| label: 'Device paused', | |
| description: 'Sent when you manually pause a device from the dashboard.', | |
| default_enabled: true, | |
| }, | |
| { | |
| key: 'billing_reminder', | |
| label: 'Billing reminders', | |
| description: 'Sent before a device trial or subscription is about to expire.', | |
| default_enabled: true, | |
| }, | |
| { | |
| key: 'payout_completed', | |
| label: 'Payout completed', | |
| description: 'Sent when a payout to your phone succeeds.', | |
| default_enabled: true, | |
| }, | |
| { | |
| key: 'payout_failed', | |
| label: 'Payout failed', | |
| description: 'Sent when a payout fails and your balance is restored.', | |
| default_enabled: true, | |
| }, | |
| { | |
| key: 'trial_granted', | |
| label: 'Trial granted', | |
| description: 'Sent when an admin grants a trial period to one of your devices.', | |
| default_enabled: true, | |
| }, | |
| { | |
| key: 'purchase_alerts', | |
| label: 'Purchase alerts', | |
| description: 'Show an in-app alert when a guest buys a WiFi bundle.', | |
| default_enabled: true, | |
| }, | |
| { | |
| key: 'system_alerts', | |
| label: 'System alerts', | |
| description: 'Show in-app device and controller alerts from Omada.', | |
| default_enabled: true, | |
| }, | |
| ]; | |
| function normalizeRow(row) { | |
| const prefs = {}; | |
| for (const [key, defaultValue] of Object.entries(DEFAULTS)) { | |
| prefs[key] = row ? Boolean(row[key]) : defaultValue; | |
| } | |
| return prefs; | |
| } | |
| async function getNotificationPreferences(clientId) { | |
| const row = await db.queryOne( | |
| `SELECT client_id, device_renewal, device_suspended, device_paused, | |
| billing_reminder, payout_completed, payout_failed, trial_granted, | |
| purchase_alerts, system_alerts | |
| FROM client_notification_preferences | |
| WHERE client_id = ?`, | |
| [clientId] | |
| ); | |
| return normalizeRow(row); | |
| } | |
| async function upsertNotificationPreferences(clientId, input) { | |
| const merged = { ...(await getNotificationPreferences(clientId)), ...input }; | |
| await db.query( | |
| `INSERT INTO client_notification_preferences | |
| (client_id, device_renewal, device_suspended, device_paused, | |
| billing_reminder, payout_completed, payout_failed, trial_granted, | |
| purchase_alerts, system_alerts) | |
| VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) | |
| ON DUPLICATE KEY UPDATE | |
| device_renewal = VALUES(device_renewal), | |
| device_suspended = VALUES(device_suspended), | |
| device_paused = VALUES(device_paused), | |
| billing_reminder = VALUES(billing_reminder), | |
| payout_completed = VALUES(payout_completed), | |
| payout_failed = VALUES(payout_failed), | |
| trial_granted = VALUES(trial_granted), | |
| purchase_alerts = VALUES(purchase_alerts), | |
| system_alerts = VALUES(system_alerts)`, | |
| [ | |
| clientId, | |
| merged.device_renewal ? 1 : 0, | |
| merged.device_suspended ? 1 : 0, | |
| merged.device_paused ? 1 : 0, | |
| merged.billing_reminder ? 1 : 0, | |
| merged.payout_completed ? 1 : 0, | |
| merged.payout_failed ? 1 : 0, | |
| merged.trial_granted ? 1 : 0, | |
| merged.purchase_alerts ? 1 : 0, | |
| merged.system_alerts ? 1 : 0, | |
| ] | |
| ); | |
| return getNotificationPreferences(clientId); | |
| } | |
| async function canSendTenantNotification(clientId, key) { | |
| const prefs = await getNotificationPreferences(clientId); | |
| return prefs[key] ?? true; | |
| } | |
| function serializePreferenceOptions(preferences) { | |
| return OPTION_DEFS.map(option => ({ | |
| ...option, | |
| enabled: preferences[option.key] ?? option.default_enabled, | |
| })); | |
| } | |
| module.exports = { | |
| DEFAULTS, | |
| OPTION_DEFS, | |
| getNotificationPreferences, | |
| upsertNotificationPreferences, | |
| canSendTenantNotification, | |
| serializePreferenceOptions, | |
| }; | |