mirror of https://github.com/mitchell/shortnr.git
36 lines
810 B
Elixir
36 lines
810 B
Elixir
|
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
|