defmodule GlificWeb.Providers.Gupshup.Controllers.BillingEventController do @moduledoc """ Dedicated controller to handle billing events from Gupshup """ use GlificWeb, :controller alias Glific.{ MessageConversations, Providers.Gupshup } @doc """ Default handle for all billing event callbacks """ @spec handler(Plug.Conn.t(), map()) :: Plug.Conn.t() def handler(conn, _params) do json(conn, nil) end @doc """ Message status when the message has been sent to gupshup """ @spec conversations(Plug.Conn.t(), map()) :: Plug.Conn.t() def conversations(conn, params), do: handle_billing_event(conn, params) @doc """ Callback for billing event """ @spec handle_billing_event(Plug.Conn.t(), map()) :: Plug.Conn.t() def handle_billing_event(conn, params) do with {:ok, message_conversation} <- Gupshup.Message.receive_billing_event(params) do message_conversation |> Map.put(:organization_id, conn.assigns[:organization_id]) |> MessageConversations.create_message_conversation() end handler(conn, params) end end