Packages

An open source two way communication platform for the social sector

Current section

Files

Jump to
glific lib glific_web providers gupshup controllers message_controller.ex
Raw

lib/glific_web/providers/gupshup/controllers/message_controller.ex

defmodule GlificWeb.Providers.Gupshup.Controllers.MessageController do
@moduledoc """
Dedicated controller to handle different types of inbound message form Gupshup
"""
use GlificWeb, :controller
alias Glific.Communications.Message, as: Communications
alias Glific.Providers.Gupshup.Message, as: GupshupMessage
@doc false
@spec handler(Plug.Conn.t(), map(), String.t()) :: Plug.Conn.t()
def handler(conn, _params, msg) do
json(conn, msg)
end
@doc false
@spec message(Plug.Conn.t(), map()) :: Plug.Conn.t()
def message(conn, params) do
handler(conn, params, "message handler")
end
@doc false
@spec text(Plug.Conn.t(), map()) :: Plug.Conn.t()
def text(conn, params) do
GupshupMessage.receive_text(params)
|> Communications.receive_text()
handler(conn, params, "text handler")
end
@doc false
@spec image(Plug.Conn.t(), map()) :: Plug.Conn.t()
def image(conn, params), do: media(conn, params, %{type: :image})
@doc false
@spec file(Plug.Conn.t(), map()) :: Plug.Conn.t()
def file(conn, params), do: media(conn, params, %{type: :document})
@doc false
@spec audio(Plug.Conn.t(), map()) :: Plug.Conn.t()
def audio(conn, params), do: media(conn, params, %{type: :audio})
@doc false
@spec video(Plug.Conn.t(), map()) :: Plug.Conn.t()
def video(conn, params), do: media(conn, params, %{type: :video})
@doc false
@spec media(Plug.Conn.t(), map(), map()) :: Plug.Conn.t()
defp media(conn, params, type) do
GupshupMessage.receive_media(params)
|> Map.merge(type)
|> Communications.receive_media()
handler(conn, params, "media handler")
end
end