From 2ed1a03d3434398501b800973072f1ceb40c95ca Mon Sep 17 00:00:00 2001 From: Halla Moore Date: Mon, 9 Jan 2017 18:06:54 -0800 Subject: [PATCH] [local-sync, iso-core]: Cascade deletes on `hasMany` associations Summary: Delete associated children when a parent is deleted to prevent foreign key constraint errors. Also make sure any child hooks are run. Test Plan: tested locally Reviewers: evan Reviewed By: evan Differential Revision: https://phab.nylas.com/D3620 --- packages/isomorphic-core/src/models/account.js | 2 +- packages/local-sync/src/models/folder.js | 2 +- packages/local-sync/src/models/message.js | 2 +- packages/local-sync/src/models/thread.js | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/isomorphic-core/src/models/account.js b/packages/isomorphic-core/src/models/account.js index 8750b6847..709d9534b 100644 --- a/packages/isomorphic-core/src/models/account.js +++ b/packages/isomorphic-core/src/models/account.js @@ -28,7 +28,7 @@ module.exports = (sequelize, Sequelize) => { ], classMethods: { associate(data = {}) { - Account.hasMany(data.AccountToken, {as: 'tokens'}) + Account.hasMany(data.AccountToken, {as: 'tokens', onDelete: 'cascade', hooks: true}) }, upsertWithCredentials(accountParams, credentials) { if (!accountParams || !credentials || !accountParams.emailAddress) { diff --git a/packages/local-sync/src/models/folder.js b/packages/local-sync/src/models/folder.js index 45ec67838..57fca90a5 100644 --- a/packages/local-sync/src/models/folder.js +++ b/packages/local-sync/src/models/folder.js @@ -40,7 +40,7 @@ module.exports = (sequelize, Sequelize) => { }, { classMethods: { associate({Folder, Message, Thread}) { - Folder.hasMany(Message) + Folder.hasMany(Message, {onDelete: 'cascade', hooks: true}) Folder.belongsToMany(Thread, {through: 'thread_folders'}) }, diff --git a/packages/local-sync/src/models/message.js b/packages/local-sync/src/models/message.js index e9a8c02b5..a13979863 100644 --- a/packages/local-sync/src/models/message.js +++ b/packages/local-sync/src/models/message.js @@ -82,7 +82,7 @@ module.exports = (sequelize, Sequelize) => { Message.belongsTo(Thread) Message.belongsTo(Folder) Message.belongsToMany(Label, {through: MessageLabel}) - Message.hasMany(File) + Message.hasMany(File, {onDelete: 'cascade', hooks: true}) }, hash({from = [], to = [], cc = [], bcc = [], date = '', subject = '', headerMessageId = ''} = {}) { diff --git a/packages/local-sync/src/models/thread.js b/packages/local-sync/src/models/thread.js index 94dd78c56..f321c35ef 100644 --- a/packages/local-sync/src/models/thread.js +++ b/packages/local-sync/src/models/thread.js @@ -42,7 +42,7 @@ module.exports = (sequelize, Sequelize) => { associate: ({Thread, Folder, ThreadFolder, Label, ThreadLabel, Message}) => { Thread.belongsToMany(Folder, {through: ThreadFolder}) Thread.belongsToMany(Label, {through: ThreadLabel}) - Thread.hasMany(Message) + Thread.hasMany(Message, {onDelete: 'cascade', hooks: true}) }, }, instanceMethods: {