feat: add ntfy and telegram notification workflows

This commit is contained in:
2025-11-09 20:08:14 +01:00
parent d4a28c9897
commit 539759ed60
6 changed files with 820 additions and 6 deletions

View File

@@ -9,6 +9,8 @@ const { readConfig, writeConfig } = require('./services/configStore');
const foodsharingClient = require('./services/foodsharingClient');
const { scheduleConfig } = require('./services/pickupScheduler');
const adminConfig = require('./services/adminConfig');
const { readNotificationSettings, writeNotificationSettings } = require('./services/userSettingsStore');
const notificationService = require('./services/notificationService');
const ONE_YEAR_MS = 365 * 24 * 60 * 60 * 1000;
const adminEmail = (process.env.ADMIN_EMAIL || '').toLowerCase();
@@ -388,6 +390,55 @@ app.post('/api/config', requireAuth, (req, res) => {
res.json({ success: true });
});
app.get('/api/notifications/settings', requireAuth, (req, res) => {
const userSettings = readNotificationSettings(req.session.profile.id);
const adminSettings = adminConfig.readSettings();
res.json({
settings: userSettings.notifications,
capabilities: {
ntfy: {
enabled: !!(
adminSettings.notifications?.ntfy?.enabled && adminSettings.notifications?.ntfy?.serverUrl
),
serverUrl: adminSettings.notifications?.ntfy?.serverUrl || '',
topicPrefix: adminSettings.notifications?.ntfy?.topicPrefix || ''
},
telegram: {
enabled: !!(
adminSettings.notifications?.telegram?.enabled && adminSettings.notifications?.telegram?.botToken
)
}
}
});
});
app.post('/api/notifications/settings', requireAuth, (req, res) => {
const payload = {
notifications: {
ntfy: {
enabled: !!req.body?.notifications?.ntfy?.enabled,
topic: req.body?.notifications?.ntfy?.topic || '',
serverUrl: req.body?.notifications?.ntfy?.serverUrl || ''
},
telegram: {
enabled: !!req.body?.notifications?.telegram?.enabled,
chatId: req.body?.notifications?.telegram?.chatId || ''
}
}
};
const updated = writeNotificationSettings(req.session.profile.id, payload);
res.json(updated.notifications);
});
app.post('/api/notifications/test', requireAuth, async (req, res) => {
try {
await notificationService.sendTestNotification(req.session.profile.id, req.body?.channel);
res.json({ success: true });
} catch (error) {
res.status(400).json({ error: error.message || 'Testbenachrichtigung fehlgeschlagen' });
}
});
app.get('/api/stores', requireAuth, async (req, res) => {
res.json(req.session.storesCache?.data || []);
});