Current section

Files

Jump to
wax lib api media.ex
Raw

lib/api/media.ex

defmodule Whatsapp.Api.Media do
@moduledoc """
Modulo para el manejo de archivos media de Whatsapp
"""
@parser Application.compile_env(:wax, :parser)
alias Whatsapp.Models.{MessageOutboundMedia, MessageOutboundMediaHsm}
alias WhatsappApiRequestMedia
require Logger
@doc """
Carga el archivo al servidor de Whatsapp
"""
@spec upload(tuple(), MessageOutboundMediaHsm.t() | MessageOutboundMedia.t()) :: tuple
def upload(token, %MessageOutboundMediaHsm{data: data, mime_type: mime_type}),
do: upload(token, data, mime_type)
def upload(token, %MessageOutboundMedia{data: data, mime_type: mime_type}),
do: upload(token, data, mime_type)
def upload({url, auth_header}, data, mime_type) do
headers = [{"Content-Type", mime_type}, auth_header]
url
|> Kernel.<>("/media")
|> WhatsappApiRequestMedia.rate_limit_request(:post!, data, headers)
|> @parser.parse(:media_upload)
end
@doc """
Obtiene el archivo media del servidor de la aplicación de Whatsapp
"""
@spec download(tuple(), integer | String.t()) :: tuple
def download({url, auth_header}, media_id) do
url
|> Kernel.<>("/media/#{media_id}")
|> WhatsappApiRequestMedia.rate_limit_request(:get!, [auth_header])
|> @parser.parse(:media_download)
end
@doc """
Elimina un archivo media en el servidor de Whatsapp
"""
@spec delete(tuple(), integer | String.t()) :: tuple
def delete({url, auth_header}, media_id) do
url
|> Kernel.<>("/media/#{media_id}")
|> WhatsappApiRequestMedia.rate_limit_request(:delete!, [auth_header])
|> @parser.parse(:media_delete)
end
end