Current section
Files
Jump to
Current section
Files
lib/campaign_flow/client/campaigns.ex
defmodule CampaignFlow.Client.Campaigns do
@moduledoc """
Campaign resource operations for the Campaign Flow API.
This module provides functions for managing campaigns, including:
- Listing and retrieving campaigns
- Creating and updating campaigns
- Managing campaign status and comments
- Managing campaign vendors
"""
alias CampaignFlow.Client
alias CampaignFlow.Client.Request
@doc """
Lists all campaigns.
## Options
* `:page` - Page number for pagination
* `:per_page` - Number of items per page
* Additional query parameters can be passed as options
## Examples
{:ok, campaigns} = CampaignFlow.Client.Campaigns.list(client)
{:ok, campaigns} = CampaignFlow.Client.Campaigns.list(client, page: 2, per_page: 50)
"""
@spec list(Client.t(), keyword()) :: Client.Request.response()
def list(client, params \\ []) do
Request.get(client, "/campaigns", params: params)
end
@doc """
Retrieves a specific campaign by ID.
## Examples
{:ok, campaign} = CampaignFlow.Client.Campaigns.get(client, 123)
"""
@spec get(Client.t(), integer()) :: Client.Request.response()
def get(client, id) do
Request.get(client, "/campaigns/#{id}")
end
@doc """
Creates a new campaign.
## Examples
{:ok, campaign} = CampaignFlow.Client.Campaigns.create(client, %{
name: "Summer Campaign",
agency_id: 1,
property_id: 2
})
"""
@spec create(Client.t(), map()) :: Client.Request.response()
def create(client, params) do
Request.post(client, "/campaigns", json: params)
end
@doc """
Updates an existing campaign.
## Examples
{:ok, campaign} = CampaignFlow.Client.Campaigns.update(client, 123, %{
name: "Updated Campaign Name"
})
"""
@spec update(Client.t(), integer(), map()) :: Client.Request.response()
def update(client, id, params) do
Request.put(client, "/campaigns/#{id}", json: params)
end
@doc """
Adds a comment to the audit log of a campaign.
## Examples
{:ok, response} = CampaignFlow.Client.Campaigns.add_comment(client, 123, %{
comment: "Campaign approved by client"
})
"""
@spec add_comment(Client.t(), integer(), map()) :: Client.Request.response()
def add_comment(client, id, params) do
Request.post(client, "/campaigns/#{id}/add-comment", json: params)
end
@doc """
Sets the status of a campaign.
## Examples
{:ok, response} = CampaignFlow.Client.Campaigns.set_status(client, 123, %{
status: "approved"
})
"""
@spec set_status(Client.t(), integer(), map()) :: Client.Request.response()
def set_status(client, id, params) do
Request.post(client, "/campaigns/#{id}/set-status", json: params)
end
@doc """
Sends the approved email for a campaign.
## Examples
{:ok, response} = CampaignFlow.Client.Campaigns.send_approved_email(client, 123)
"""
@spec send_approved_email(Client.t(), integer()) :: Client.Request.response()
def send_approved_email(client, campaign_id) do
Request.post(client, "/campaigns/#{campaign_id}/send-approved-email")
end
# Vendor-related functions
@doc """
Lists all vendors for a campaign.
## Examples
{:ok, vendors} = CampaignFlow.Client.Campaigns.list_vendors(client, 123)
"""
@spec list_vendors(Client.t(), integer(), keyword()) :: Client.Request.response()
def list_vendors(client, campaign_id, params \\ []) do
Request.get(client, "/campaigns/#{campaign_id}/vendors", params: params)
end
@doc """
Retrieves a specific vendor for a campaign.
## Examples
{:ok, vendor} = CampaignFlow.Client.Campaigns.get_vendor(client, 123, 456)
"""
@spec get_vendor(Client.t(), integer(), integer()) :: Client.Request.response()
def get_vendor(client, campaign_id, vendor_id) do
Request.get(client, "/campaigns/#{campaign_id}/vendors/#{vendor_id}")
end
@doc """
Adds a vendor to a campaign.
## Examples
{:ok, vendor} = CampaignFlow.Client.Campaigns.add_vendor(client, 123, %{
vendor_id: 456
})
"""
@spec add_vendor(Client.t(), integer(), map()) :: Client.Request.response()
def add_vendor(client, campaign_id, params) do
Request.post(client, "/campaigns/#{campaign_id}/vendors", json: params)
end
@doc """
Updates a vendor for a campaign.
## Examples
{:ok, vendor} = CampaignFlow.Client.Campaigns.update_vendor(client, 123, 456, %{
status: "approved"
})
"""
@spec update_vendor(Client.t(), integer(), integer(), map()) ::
Client.Request.response()
def update_vendor(client, campaign_id, vendor_id, params) do
Request.put(client, "/campaigns/#{campaign_id}/vendors/#{vendor_id}", json: params)
end
@doc """
Removes a vendor from a campaign.
## Examples
{:ok, response} = CampaignFlow.Client.Campaigns.remove_vendor(client, 123, 456)
"""
@spec remove_vendor(Client.t(), integer(), integer()) ::
Client.Request.response()
def remove_vendor(client, campaign_id, vendor_id) do
Request.delete(client, "/campaigns/#{campaign_id}/vendors/#{vendor_id}")
end
@doc """
Sends a campaign to a vendor.
## Examples
{:ok, response} = CampaignFlow.Client.Campaigns.send_campaign_to_vendor(client, 123, 456)
"""
@spec send_campaign_to_vendor(Client.t(), integer(), integer()) ::
Client.Request.response()
def send_campaign_to_vendor(client, campaign_id, vendor_id) do
Request.post(client, "/campaigns/#{campaign_id}/vendors/#{vendor_id}/send-campaign")
end
@doc """
Verifies vendor contact information.
## Examples
{:ok, response} = CampaignFlow.Client.Campaigns.verify_vendor_contact(client, 123, 456)
"""
@spec verify_vendor_contact(Client.t(), integer(), integer()) ::
Client.Request.response()
def verify_vendor_contact(client, campaign_id, vendor_id) do
Request.post(client, "/campaigns/#{campaign_id}/vendors/#{vendor_id}/verify-contact")
end
end