tududi/backend/migrations/20251209000001-add-telegram-to-notification-preferences.js
Chris 819faf0d18
Feat telegram notifications (#692)
* Add telegram notifications

* fixup! Add telegram notifications

* Cleanup
2025-12-09 20:26:53 +02:00

141 lines
4.7 KiB
JavaScript

'use strict';
const { safeChangeColumn } = require('../utils/migration-utils');
module.exports = {
async up(queryInterface, Sequelize) {
const [users] = await queryInterface.sequelize.query(
'SELECT id, notification_preferences FROM users WHERE notification_preferences IS NOT NULL'
);
for (const user of users) {
const prefs = user.notification_preferences;
if (prefs.dueTasks) {
prefs.dueTasks.telegram = false;
}
if (prefs.overdueTasks) {
prefs.overdueTasks.telegram = false;
}
if (prefs.dueProjects) {
prefs.dueProjects.telegram = false;
}
if (prefs.overdueProjects) {
prefs.overdueProjects.telegram = false;
}
if (prefs.deferUntil) {
prefs.deferUntil.telegram = false;
}
// Update the user's preferences
await queryInterface.sequelize.query(
'UPDATE users SET notification_preferences = :prefs WHERE id = :id',
{
replacements: {
prefs: JSON.stringify(prefs),
id: user.id,
},
}
);
}
await safeChangeColumn(
queryInterface,
'users',
'notification_preferences',
{
type: Sequelize.JSON,
allowNull: true,
defaultValue: {
dueTasks: {
inApp: true,
email: false,
push: false,
telegram: false,
},
overdueTasks: {
inApp: true,
email: false,
push: false,
telegram: false,
},
dueProjects: {
inApp: true,
email: false,
push: false,
telegram: false,
},
overdueProjects: {
inApp: true,
email: false,
push: false,
telegram: false,
},
deferUntil: {
inApp: true,
email: false,
push: false,
telegram: false,
},
},
comment:
'User notification channel preferences for different notification types',
}
);
},
async down(queryInterface, Sequelize) {
const [users] = await queryInterface.sequelize.query(
'SELECT id, notification_preferences FROM users WHERE notification_preferences IS NOT NULL'
);
for (const user of users) {
const prefs = user.notification_preferences;
if (prefs.dueTasks) {
delete prefs.dueTasks.telegram;
}
if (prefs.overdueTasks) {
delete prefs.overdueTasks.telegram;
}
if (prefs.dueProjects) {
delete prefs.dueProjects.telegram;
}
if (prefs.overdueProjects) {
delete prefs.overdueProjects.telegram;
}
if (prefs.deferUntil) {
delete prefs.deferUntil.telegram;
}
await queryInterface.sequelize.query(
'UPDATE users SET notification_preferences = :prefs WHERE id = :id',
{
replacements: {
prefs: JSON.stringify(prefs),
id: user.id,
},
}
);
}
await safeChangeColumn(
queryInterface,
'users',
'notification_preferences',
{
type: Sequelize.JSON,
allowNull: true,
defaultValue: {
dueTasks: { inApp: true, email: false, push: false },
overdueTasks: { inApp: true, email: false, push: false },
dueProjects: { inApp: true, email: false, push: false },
overdueProjects: { inApp: true, email: false, push: false },
deferUntil: { inApp: true, email: false, push: false },
},
comment:
'User notification channel preferences for different notification types',
}
);
},
};