defmodule LineMessage.EventHandle do use Maru.Router plug Plug.Logger plug Plug.Parsers, parsers: [:json], json_decoder: Poison get "/" do conn |> text("OK") end params do requires :events, type: List do requires :replyToken requires :type optional :timestamp requires :source, type: Map do requires :type requires :userId end optional :message, type: Map do requires :id requires :type optional :text end optional :beacon, type: Map do requires :hwid requires :type end end end post "/" do handle_events(params[:events]) conn |> text("OK") end def handle_events([]), do: {:ok} def handle_events([event|t]) do case event[:type] do "message" -> handle_message(event[:replyToken], event[:source], event[:message]) "beacon" -> handle_beacon(event[:replyToken], event[:source], event[:beacon]) end handle_events(t) end def handle_message(replyToken, source, message) do eventHandler = Application.get_env(:line_message, :eventHandler) eventHandler.handle_message(replyToken, source, message) end def handle_beacon(replyToken, source, beacon) do eventHandler = Application.get_env(:line_message, :eventHandler) eventHandler.handle_beacon(replyToken, source, beacon) end end