lib/openagents_web/controllers/capacity_controller.ex

58e6347eeb72 · 916 B

defmodule OpenAgentsWeb.CapacityController do
  @moduledoc """
  Owner-authenticated capacity and device-to-job matching endpoints.
  """

  use OpenAgentsWeb, :controller

  alias OpenAgents.Capacity

  def show(conn, _params) do
    json(conn, Capacity.projection(conn.assigns.current_user))
  end

  def matches(conn, params) do
    case Capacity.match(conn.assigns.current_user, params) do
      {:ok, response} ->
        json(conn, response)

      {:error, %{"error" => %{"code" => code}} = response} ->
        conn
        |> put_status(status_for(code))
        |> json(response)
    end
  end

  defp status_for("computer_not_found"), do: :not_found
  defp status_for("quantity_unavailable"), do: :conflict

  defp status_for(code)
       when code in ["evidence_stale", "evidence_unavailable", "incident_drained"],
       do: :service_unavailable

  defp status_for(_code), do: :unprocessable_entity
end