fix: resolve api issue with custom name

This commit is contained in:
Guarzo
2025-06-13 21:14:07 -04:00
parent 45eb08fc3a
commit 2fc45e00b4
5 changed files with 51 additions and 22 deletions

View File

@@ -76,6 +76,11 @@ defmodule WandererApp.Map.Operations do
{:ok, map()} | {:skip, :exists} | {:error, String.t()}
defdelegate create_connection(map_id, attrs, char_id), to: Connections
@doc "Create a connection from a Plug.Conn"
@spec create_connection(Plug.Conn.t(), map()) ::
{:ok, :created} | {:skip, :exists} | {:error, atom()}
defdelegate create_connection(conn, attrs), to: Connections
@doc "Update a connection"
@spec update_connection(String.t(), String.t(), map()) ::
{:ok, map()} | {:error, String.t()}

View File

@@ -5,9 +5,10 @@ defmodule WandererApp.Map.Operations.Connections do
"""
require Logger
alias WandererApp.Map.Server.{ConnectionsImpl, Server}
alias WandererApp.Map.Server
alias Ash.Error.Invalid
alias WandererApp.MapConnectionRepo
alias WandererApp.CachedInfo
# Connection type constants
@connection_type_wormhole 0
@@ -20,7 +21,7 @@ defmodule WandererApp.Map.Operations.Connections do
@xlarge_ship_size 3
# System class constants
@c1_system_class "C1"
@c1_system_class 1
@doc """
Creates a connection between two systems, applying special rules for C1 wormholes.
@@ -34,8 +35,8 @@ defmodule WandererApp.Map.Operations.Connections do
defp do_create(attrs, map_id, char_id) do
with {:ok, source} <- parse_int(attrs["solar_system_source"], "solar_system_source"),
{:ok, target} <- parse_int(attrs["solar_system_target"], "solar_system_target"),
{:ok, src_info} <- ConnectionsImpl.get_system_static_info(source),
{:ok, tgt_info} <- ConnectionsImpl.get_system_static_info(target) do
{:ok, src_info} <- CachedInfo.get_system_static_info(source),
{:ok, tgt_info} <- CachedInfo.get_system_static_info(target) do
build_and_add_connection(attrs, map_id, char_id, src_info, tgt_info)
else
{:error, reason} -> handle_precondition_error(reason, attrs)
@@ -45,6 +46,12 @@ defmodule WandererApp.Map.Operations.Connections do
end
defp build_and_add_connection(attrs, map_id, char_id, src_info, tgt_info) do
Logger.debug("[Connections] build_and_add_connection called with src_info: #{inspect(src_info)}, tgt_info: #{inspect(tgt_info)}")
# Guard against nil info
if is_nil(src_info) or is_nil(tgt_info) do
{:error, :invalid_system_info}
else
info = %{
solar_system_source_id: src_info.solar_system_id,
solar_system_target_id: tgt_info.solar_system_id,
@@ -62,6 +69,7 @@ defmodule WandererApp.Map.Operations.Connections do
other -> Logger.error("[add_connection] unexpected: #{inspect(other)}"); {:error, :unexpected_error}
end
end
end
defp resolve_ship_size(attrs, src_info, tgt_info) do
type = parse_type(attrs["type"])

View File

@@ -266,6 +266,10 @@ defmodule WandererAppWeb.MapConnectionAPIController do
conn
|> put_status(:bad_request)
|> json(%{error: reason})
{:error, :precondition_failed, _reason} ->
conn
|> put_status(:bad_request)
|> json(%{error: "Invalid request parameters"})
_other ->
conn
|> put_status(:internal_server_error)

View File

@@ -24,6 +24,7 @@ defmodule WandererAppWeb.MapSystemAPIController do
solar_system_id: %Schema{type: :integer, description: "EVE solar system ID"},
solar_system_name: %Schema{type: :string, description: "EVE solar system name"},
region_name: %Schema{type: :string, description: "EVE region name"},
custom_name: %Schema{type: :string, nullable: true, description: "Custom name for the system"},
position_x: %Schema{type: :integer, description: "X coordinate"},
position_y: %Schema{type: :integer, description: "Y coordinate"},
status: %Schema{
@@ -137,6 +138,7 @@ defmodule WandererAppWeb.MapSystemAPIController do
solar_system_id: 30_000_142,
solar_system_name: "Jita",
region_name: "The Forge",
custom_name: "Trade Hub Central",
position_x: 100.5,
position_y: 200.3,
status: "active",
@@ -179,6 +181,7 @@ defmodule WandererAppWeb.MapSystemAPIController do
solar_system_id: 30_000_142,
solar_system_name: "Jita",
region_name: "The Forge",
custom_name: "Trade Hub Central",
position_x: 100.5,
position_y: 200.3,
status: "active",

View File

@@ -262,13 +262,18 @@ defmodule WandererAppWeb.Helpers.APIUtils do
@spec map_system_to_json(struct()) :: map()
def map_system_to_json(system) do
original = get_original_name(system.solar_system_id)
# Determine the actual custom_name: if name differs from original, use it as custom_name
actual_custom_name = if system.name != original and system.name not in [nil, ""], do: system.name, else: system.custom_name
base =
Map.take(system, ~w(
id map_id solar_system_id custom_name temporary_name description tag labels
id map_id solar_system_id temporary_name description tag labels
locked visible status position_x position_y inserted_at updated_at
)a)
|> Map.put(:custom_name, actual_custom_name)
original = get_original_name(system.solar_system_id)
name = pick_name(system)
base
@@ -283,11 +288,15 @@ defmodule WandererAppWeb.Helpers.APIUtils do
end
end
defp pick_name(%{temporary_name: t, custom_name: c, solar_system_id: id}) do
defp pick_name(%{temporary_name: t, custom_name: c, name: n, solar_system_id: id} = system) do
original = get_original_name(id)
cond do
t not in [nil, ""] -> t
c not in [nil, ""] -> c
true -> get_original_name(id)
# If name differs from original, it's a custom name
n not in [nil, ""] and n != original -> n
true -> original
end
end