lib/openagents_web/controllers/changelog_controller.ex

main at 58e6347eeb72 · 854 B

defmodule OpenAgentsWeb.ChangelogController do
  @moduledoc """
  `GET /api/changelog` — the machine-readable changelog
  (schema `openagents.changelog.v1`), including receipt row ids so clients can
  cross-check every claim against the receipt chain. Same posture as
  `/api/status`: public, read-only, bounded, no identity state.
  """

  use OpenAgentsWeb, :controller

  import OpenAgentsWeb.UserAuth, only: [fetch_current_user: 2]

  plug :fetch_session
  plug :fetch_current_user

  def show(conn, params) do
    repo = Map.get(params, "repo", "openagents.com")
    viewer = conn.assigns[:current_user]

    case OpenAgents.Changelog.projection(repo, viewer: viewer) do
      {:ok, payload} ->
        json(conn, payload)

      {:error, :not_public} ->
        conn |> put_status(:not_found) |> json(%{"error" => "not found"})
    end
  end
end