3fc646f330
* add campaign store(getter, actions and mutations) * add campaign store module * add get campaigns api * add fetch campaign action widget load * add specs * code cleanup * trigger campaig api fixes * integrate campaign trigger action * code cleanup * revert changes * trigger api fixes * review fixes * code beautification * chore: Fix multiple campaigns being send because of race condition * chore: rubocop * chore: Fix specs * disable campaigns Co-authored-by: Nithin David Thomas <webofnithin@gmail.com> Co-authored-by: Sojan <sojan@pepalo.com>
38 lines
1.2 KiB
Ruby
38 lines
1.2 KiB
Ruby
class Campaigns::CampaignConversationBuilder
|
|
pattr_initialize [:contact_inbox_id!, :campaign_display_id!, :conversation_additional_attributes]
|
|
|
|
def perform
|
|
@contact_inbox = ContactInbox.find(@contact_inbox_id)
|
|
@campaign = @contact_inbox.inbox.campaigns.find_by!(display_id: campaign_display_id)
|
|
|
|
ActiveRecord::Base.transaction do
|
|
@contact_inbox.lock!
|
|
|
|
# We won't send campaigns if a conversation is already present
|
|
return if @contact_inbox.reload.conversations.present?
|
|
|
|
@conversation = ::Conversation.create!(conversation_params)
|
|
Messages::MessageBuilder.new(@campaign.sender, @conversation, message_params).perform
|
|
end
|
|
@conversation
|
|
end
|
|
|
|
private
|
|
|
|
def message_params
|
|
ActionController::Parameters.new({
|
|
content: @campaign.message
|
|
})
|
|
end
|
|
|
|
def conversation_params
|
|
{
|
|
account_id: @campaign.account_id,
|
|
inbox_id: @contact_inbox.inbox_id,
|
|
contact_id: @contact_inbox.contact_id,
|
|
contact_inbox_id: @contact_inbox.id,
|
|
campaign_id: @campaign.id,
|
|
additional_attributes: conversation_additional_attributes
|
|
}
|
|
end
|
|
end
|