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 requires :message, type: Map do requires :id requires :type optional :text end end end post "/" do [event|_] = params[:events] IO.puts "ReplyToken: " <> event[:replyToken] handle_events(params[:events]) conn |> text("OK") end def handle_events([]), do: {:ok} def handle_events([event|t]) do handle_event(event[:type], event[:replyToken], event[:message]) handle_events(t) end def handle_event("message", replyToken, message) do eventHandler = Application.get_env(:line_message, :eventHandler) eventHandler.handle_message(replyToken, message) end def handle_event("beacon", replyToken, message) do eventHandler = Application.get_env(:line_message, :eventHandler) eventHandler.handle_beacon(replyToken, message) end end