Skip to main content

lib/core/http/router.ex

# lib/core/http/router.ex
defmodule Core.HTTP.Router do
  @moduledoc """
  Default router implementation.
  This is used by the demo application.
  """
  use Plug.Router
  require Logger

  plug(Plug.Logger, log: :info)
  plug(:match)
  plug(Plug.Parsers, parsers: [:json], pass: ["application/json"], json_decoder: Jason)
  plug(Plug.Telemetry, event_prefix: [:server, :http])
  plug(:dispatch)

  import Core.HTTP.BaseRouter
  alias Core.HTTP.Handlers

  add_root_route()
  add_health_route()
  add_stats_route()

  post "/jobs" do
    Handlers.create_job(conn)
  end

  post "/jobs/schedule" do
    Handlers.schedule_job(conn)
  end

  get "/jobs" do
    Handlers.list_jobs(conn)
  end

  get "/jobs/:id" do
    Handlers.get_job(conn, id)
  end

  match _ do
    Handlers.send_json(conn, 404, %{error: "Not found"})
  end
end