## Linear Ticket https://linear.app/chatwoot/issue/CW-4569/nomethoderror-undefined-method-blocked-for-nil-nomethoderror ## Description Fixes NoMethodError in ConversationMuteHelpers that occurs during contact deletion race condition. When a contact is deleted, there's a brief window (~50-150ms) where contact_id becomes nil but conversations still exist. If ResolutionJob runs during this window, the muted? method crashes trying to call blocked? on nil.Fixes # (issue) ## Type of change - [ ] Bug fix (non-breaking change which fixes an issue) ## How Has This Been Tested? - Created orphaned conversations (contact_id = nil) - Called muted?, mute!, unmute! - all return gracefully - Verified async deletion still works correctly ## Checklist: - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my code - [ ] I have commented on my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] Any dependent changes have been merged and published in downstream modules Co-authored-by: Sojan Jose <sojan@pepalo.com>
23 lines
347 B
Ruby
23 lines
347 B
Ruby
module ConversationMuteHelpers
|
|
extend ActiveSupport::Concern
|
|
|
|
def mute!
|
|
return unless contact
|
|
|
|
resolved!
|
|
contact.update(blocked: true)
|
|
create_muted_message
|
|
end
|
|
|
|
def unmute!
|
|
return unless contact
|
|
|
|
contact.update(blocked: false)
|
|
create_unmuted_message
|
|
end
|
|
|
|
def muted?
|
|
contact&.blocked? || false
|
|
end
|
|
end
|