mirror of
https://github.com/wanderer-industries/wanderer
synced 2025-12-12 02:35:42 +00:00
64 lines
1.7 KiB
Elixir
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
|