From c963abeb8b425a5b8c835b954d6333dba5c21fc4 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Fri, 9 Sep 2022 23:31:38 +0200 Subject: [PATCH] fix: Missing cascade constraints on notifications table (#4096) --- ...0909203454-fix-notification-constraints.js | 91 +++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 server/migrations/20220909203454-fix-notification-constraints.js diff --git a/server/migrations/20220909203454-fix-notification-constraints.js b/server/migrations/20220909203454-fix-notification-constraints.js new file mode 100644 index 000000000..b7d153d1d --- /dev/null +++ b/server/migrations/20220909203454-fix-notification-constraints.js @@ -0,0 +1,91 @@ +'use strict'; + +module.exports = { + up: async (queryInterface, Sequelize) => { + await queryInterface.sequelize.transaction(async (transaction) => { + await queryInterface.removeConstraint("notifications", "notifications_userId_fkey", { transaction }) + await queryInterface.removeConstraint("notifications", "notifications_actorId_fkey", { transaction }) + await queryInterface.removeConstraint("notifications", "notifications_teamId_fkey", { transaction }) + await queryInterface.removeConstraint("notifications", "notifications_documentId_fkey", { transaction }) + }); + await queryInterface.sequelize.transaction(async (transaction) => { + await queryInterface.changeColumn("notifications", "userId", { + type: Sequelize.UUID, + onDelete: "cascade", + references: { + model: "users", + }, + transaction, + }); + await queryInterface.changeColumn("notifications", "actorId", { + type: Sequelize.UUID, + allowNull: true, + onDelete: "set null", + references: { + model: "users", + }, + transaction, + }); + await queryInterface.changeColumn("notifications", "teamId", { + type: Sequelize.UUID, + allowNull: false, + onDelete: "cascade", + references: { + model: "teams", + }, + transaction, + }); + await queryInterface.changeColumn("notifications", "documentId", { + type: Sequelize.UUID, + allowNull: true, + onDelete: "cascade", + references: { + model: "documents", + }, + transaction, + }); + }); + }, + + down: async (queryInterface, Sequelize) => { + await queryInterface.sequelize.transaction(async (transaction) => { + await queryInterface.removeConstraint("notifications", "notifications_userId_fkey", { transaction }) + await queryInterface.removeConstraint("notifications", "notifications_actorId_fkey", { transaction }) + await queryInterface.removeConstraint("notifications", "notifications_teamId_fkey", { transaction }) + await queryInterface.removeConstraint("notifications", "notifications_documentId_fkey", { transaction }) + }); + await queryInterface.sequelize.transaction(async (transaction) => { + await queryInterface.changeColumn("notifications", "userId", { + type: Sequelize.UUID, + references: { + model: "users", + }, + transaction, + }); + await queryInterface.changeColumn("notifications", "actorId", { + type: Sequelize.UUID, + allowNull: true, + references: { + model: "users", + }, + transaction, + }); + await queryInterface.changeColumn("notifications", "teamId", { + type: Sequelize.UUID, + allowNull: false, + references: { + model: "teams", + }, + transaction, + }); + await queryInterface.changeColumn("notifications", "documentId", { + type: Sequelize.UUID, + allowNull: true, + references: { + model: "documents", + }, + transaction, + }); + }); + } +};