chore: Delete related notifications if a conversation is deleted (#2592)
This commit is contained in:
parent
5726447e47
commit
ba547b3f60
4 changed files with 22 additions and 1 deletions
|
@ -61,6 +61,7 @@ class Conversation < ApplicationRecord
|
||||||
|
|
||||||
has_many :messages, dependent: :destroy, autosave: true
|
has_many :messages, dependent: :destroy, autosave: true
|
||||||
has_one :csat_survey_response, dependent: :destroy
|
has_one :csat_survey_response, dependent: :destroy
|
||||||
|
has_many :notifications, as: :primary_actor, dependent: :destroy
|
||||||
|
|
||||||
before_create :set_bot_conversation
|
before_create :set_bot_conversation
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
class RemoveNotificationsWithoutPrimaryActor < ActiveRecord::Migration[6.0]
|
||||||
|
def change
|
||||||
|
deleted_ids = []
|
||||||
|
Notification.where(primary_actor_type: 'Conversation').pluck(:primary_actor_id).uniq.each_slice(1000) do |id_list|
|
||||||
|
deleted_ids << id_list - Conversation.where(id: id_list).pluck(:id)
|
||||||
|
end
|
||||||
|
Notification.where(primary_actor_type: 'Conversation', primary_actor_id: deleted_ids).destroy_all
|
||||||
|
end
|
||||||
|
end
|
|
@ -10,7 +10,7 @@
|
||||||
#
|
#
|
||||||
# It's strongly recommended that you check this file into your version control system.
|
# It's strongly recommended that you check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema.define(version: 2021_06_23_155413) do
|
ActiveRecord::Schema.define(version: 2021_07_08_140842) do
|
||||||
|
|
||||||
# These are extensions that must be enabled in order to support this database
|
# These are extensions that must be enabled in order to support this database
|
||||||
enable_extension "pg_stat_statements"
|
enable_extension "pg_stat_statements"
|
||||||
|
|
|
@ -399,4 +399,15 @@ RSpec.describe Conversation, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '#delete conversation' do
|
||||||
|
let!(:conversation) { create(:conversation) }
|
||||||
|
|
||||||
|
let!(:notification) { create(:notification, notification_type: 'conversation_creation', primary_actor: conversation) }
|
||||||
|
|
||||||
|
it 'delete associated notifications if conversation is deleted' do
|
||||||
|
conversation.destroy
|
||||||
|
expect { notification.reload }.to raise_error ActiveRecord::RecordNotFound
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue