Files
wanderer/lib/wanderer_app_web/controllers/character_api_controller.ex
2025-07-16 20:39:30 +00:00

64 lines
1.7 KiB
Elixir

defmodule WandererAppWeb.CharactersAPIController do
@moduledoc """
Exposes an endpoint for listing ALL characters in the database
"""
use WandererAppWeb, :controller
use OpenApiSpex.ControllerSpecs
alias WandererApp.Api.Character
@characters_index_response_schema %OpenApiSpex.Schema{
type: :object,
properties: %{
data: %OpenApiSpex.Schema{
type: :array,
items: %OpenApiSpex.Schema{
type: :object,
properties: %{
eve_id: %OpenApiSpex.Schema{type: :string},
name: %OpenApiSpex.Schema{type: :string},
corporation_id: %OpenApiSpex.Schema{type: :string},
corporation_ticker: %OpenApiSpex.Schema{type: :string},
alliance_id: %OpenApiSpex.Schema{type: :string},
alliance_ticker: %OpenApiSpex.Schema{type: :string}
},
required: ["eve_id", "name"]
}
}
},
required: ["data"]
}
@doc """
GET /api/characters
"""
@spec index(Plug.Conn.t(), map()) :: Plug.Conn.t()
operation(:index,
summary: "List Characters",
description: "Lists ALL characters in the database.",
responses: [
ok: {
"List of characters",
"application/json",
@characters_index_response_schema
}
]
)
def index(conn, _params) do
case Ash.read(Character) do
{:ok, characters} ->
result =
characters
|> Enum.map(&WandererAppWeb.MapEventHandler.map_ui_character_stat/1)
json(conn, %{data: result})
{:error, error} ->
conn
|> put_status(:internal_server_error)
|> json(%{error: inspect(error)})
end
end
end