shortnr/lib/router.ex

36 lines
810 B
Elixir
Raw Normal View History

2019-12-08 02:34:58 +00:00
defmodule Shortnr.Router do
use Plug.ErrorHandler
use Plug.Router
require Logger
alias Shortnr.Transport.{Json, Http}
alias Shortnr.Url
plug(Plug.Logger, log: :debug)
plug(:match)
plug(:dispatch)
post "/urls" do
conn
|> Json.decode_request(Url.CreateRequest)
|> Http.handle(&Url.create(&1, Url.Repo.DETS))
|> Json.encode_response()
|> Http.send(:created, conn)
end
match _ do
{:error, {:not_found, "route not found"}, conn}
|> Json.encode_response()
|> Http.send(:ignore, conn)
end
def handle_errors(conn, %{kind: _kind, reason: reason, stack: stack}) do
Logger.error(inspect(reason), stack: stack)
{:error, {:internal_server_error, "internal server error"}, conn}
|> Json.encode_response()
|> Http.send(:ignore, conn)
end
end