feat: Builder for creating Campaign conversations (#2192)

- Builder for creating Campaign conversations
- Widget endpoint to fetch the campaigns
This commit is contained in:
Sojan Jose
2021-05-03 20:23:09 +05:30
committed by GitHub
parent b649516fbb
commit 98e2a9b8b5
13 changed files with 182 additions and 6 deletions

View File

@@ -0,0 +1,36 @@
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)
# We won't send campaigns if a conversation is already present
return if @contact_inbox.conversations.present?
ActiveRecord::Base.transaction do
@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