first commit of refactor
This commit is contained in:
105
backend/controllers/NotificationConfigController.js
Normal file
105
backend/controllers/NotificationConfigController.js
Normal file
@@ -0,0 +1,105 @@
|
||||
import * as NotificationConfigModel from '../models/NotificationConfigModel.js';
|
||||
|
||||
/**
|
||||
* Get notification config for the authenticated user
|
||||
*/
|
||||
export async function getConfig(req, res) {
|
||||
const user_id = req.user_id; // From authenticate middleware
|
||||
|
||||
console.log(`User ${user_id} getting notification config`);
|
||||
|
||||
const config = await NotificationConfigModel.getConfig(user_id);
|
||||
|
||||
if (!config) {
|
||||
// Return empty config if not set
|
||||
return res.json({
|
||||
user_id,
|
||||
discord_webhook_url: null,
|
||||
telegram_chat_id: null,
|
||||
email: null,
|
||||
notification_enabled: true
|
||||
});
|
||||
}
|
||||
|
||||
console.log(`Config found`);
|
||||
return res.json(config);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update notification config for the authenticated user
|
||||
*/
|
||||
export async function updateConfig(req, res) {
|
||||
const user_id = req.user_id; // From authenticate middleware
|
||||
const { discord_webhook_url, telegram_chat_id, email, notification_enabled } = req.body;
|
||||
|
||||
console.log(`User ${user_id} updating notification config`);
|
||||
|
||||
// Validation: at least one field should be provided
|
||||
if (
|
||||
discord_webhook_url === undefined &&
|
||||
telegram_chat_id === undefined &&
|
||||
email === undefined &&
|
||||
notification_enabled === undefined
|
||||
) {
|
||||
return res.status(400).json({
|
||||
error: 'VALIDATION_ERROR',
|
||||
message: 'At least one configuration field must be provided'
|
||||
});
|
||||
}
|
||||
|
||||
// Validation: Discord webhook URL format (basic check)
|
||||
if (discord_webhook_url && !discord_webhook_url.startsWith('https://discord.com/api/webhooks/')) {
|
||||
return res.status(400).json({
|
||||
error: 'VALIDATION_ERROR',
|
||||
message: 'Invalid Discord webhook URL format'
|
||||
});
|
||||
}
|
||||
|
||||
// Validation: Email format (basic check)
|
||||
if (email && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) {
|
||||
return res.status(400).json({
|
||||
error: 'VALIDATION_ERROR',
|
||||
message: 'Invalid email address format'
|
||||
});
|
||||
}
|
||||
|
||||
try {
|
||||
const updatedConfig = await NotificationConfigModel.upsertConfig(user_id, {
|
||||
discord_webhook_url,
|
||||
telegram_chat_id,
|
||||
email,
|
||||
notification_enabled
|
||||
});
|
||||
|
||||
console.log(`Notification config updated`);
|
||||
return res.json(updatedConfig);
|
||||
} catch (error) {
|
||||
console.error('Error updating notification config:', error);
|
||||
return res.status(500).json({
|
||||
error: 'INTERNAL_ERROR',
|
||||
message: 'Failed to update notification configuration'
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete notification config for the authenticated user
|
||||
*/
|
||||
export async function deleteConfig(req, res) {
|
||||
const user_id = req.user_id; // From authenticate middleware
|
||||
|
||||
console.log(`User ${user_id} deleting notification config`);
|
||||
|
||||
const deleted = await NotificationConfigModel.remove(user_id);
|
||||
|
||||
if (!deleted) {
|
||||
return res.status(404).json({
|
||||
error: 'NOT_FOUND',
|
||||
message: 'No notification configuration found'
|
||||
});
|
||||
}
|
||||
|
||||
console.log(`Notification config deleted`);
|
||||
return res.status(204).send();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user