defmodule MicrowavepropWeb.ApiDocsController do @moduledoc """ Serves the static `docs/api/` artifacts: * `GET /docs/api/openapi.yaml` — OpenAPI 3.1 spec as `application/yaml`. * `GET /docs/api/README.md` — raw markdown source (for agents that prefer markdown over the rendered LiveView page). The human-facing rendered docs live at `/docs/api` via `MicrowavepropWeb.ApiDocsLive`. """ use MicrowavepropWeb, :controller @external_resource "docs/api/openapi.yaml" @external_resource "docs/api/README.md" @openapi_yaml File.read!("docs/api/openapi.yaml") @readme_markdown File.read!("docs/api/README.md") @spec openapi_yaml(Plug.Conn.t(), map()) :: Plug.Conn.t() def openapi_yaml(conn, _params) do conn |> put_resp_content_type("application/yaml", "utf-8") |> put_resp_header("cache-control", "public, max-age=3600") |> send_resp(200, @openapi_yaml) end @spec readme_markdown(Plug.Conn.t(), map()) :: Plug.Conn.t() def readme_markdown(conn, _params) do conn |> put_resp_content_type("text/markdown", "utf-8") |> put_resp_header("cache-control", "public, max-age=3600") |> send_resp(200, @readme_markdown) end end