- /docs/api → LiveView rendering README.md as HTML - /docs/api/openapi.yaml → raw OpenAPI 3.1 spec - /docs/api/README.md → raw markdown source
35 lines
1.2 KiB
Elixir
35 lines
1.2 KiB
Elixir
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
|