shortnr/lib/router.ex

42 lines
1008 B
Elixir
Raw Normal View History

2019-12-08 02:34:58 +00:00
defmodule Shortnr.Router do
@moduledoc """
This module contains the Router for the Shortnr application. Do not import, other than
Application entry.
"""
alias Shortnr.Transport.HTTP
alias Shortnr.URL
2019-12-08 02:34:58 +00:00
require Logger
use Plug.ErrorHandler
use Plug.Router
2019-12-08 02:34:58 +00:00
plug(Plug.Logger, log: :debug)
plug(:match)
plug(:dispatch)
# BEGIN URL routes
post("/urls/:url", do: URL.Endpoints.select(conn, :create, url))
2019-12-08 02:34:58 +00:00
get("/", do: URL.Endpoints.select(conn, :list))
get("/urls", do: URL.Endpoints.select(conn, :list))
get("/:id", do: URL.Endpoints.select(conn, :get, id))
2019-12-08 18:44:04 +00:00
delete("/:id", do: URL.Endpoints.select(conn, :delete, id))
# END
2019-12-08 02:34:58 +00:00
match _ do
conn
|> HTTP.wrap({:not_found, "route not found"})
|> HTTP.send()
2019-12-08 02:34:58 +00:00
end
def handle_errors(conn, %{kind: _kind, reason: reason, stack: stack}) do
Logger.error(inspect(reason), stack: ~s|"#{inspect(stack)}"|)
2019-12-08 02:34:58 +00:00
conn
|> HTTP.wrap({:internal_server_error, "internal server error"})
|> HTTP.send()
2019-12-08 02:34:58 +00:00
end
end