chore: Delete related notifications if a conversation is deleted (#2592)

This commit is contained in:
Muhsin Keloth 2021-07-12 12:28:16 +05:30 committed by GitHub
parent 5726447e47
commit ba547b3f60
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 22 additions and 1 deletions

View file

@ -61,6 +61,7 @@ class Conversation < ApplicationRecord
has_many :messages, dependent: :destroy, autosave: true
has_one :csat_survey_response, dependent: :destroy
has_many :notifications, as: :primary_actor, dependent: :destroy
before_create :set_bot_conversation

View file

@ -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

View file

@ -10,7 +10,7 @@
#
# 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
enable_extension "pg_stat_statements"

View file

@ -399,4 +399,15 @@ RSpec.describe Conversation, type: :model do
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