Files
wanderer/lib/wanderer_app/api/map_solar_system.ex
2025-07-16 20:39:30 +00:00

154 lines
3.3 KiB
Elixir

defmodule WandererApp.Api.MapSolarSystem do
@moduledoc false
use Ash.Resource,
domain: WandererApp.Api,
data_layer: AshPostgres.DataLayer,
extensions: [AshJsonApi.Resource]
postgres do
repo(WandererApp.Repo)
table("map_solar_system_v2")
end
json_api do
type "map_solar_systems"
# Enable automatic filtering and sorting
derive_filter?(true)
derive_sort?(true)
routes do
# No routes - this resource should not be exposed via API
end
end
code_interface do
define(:read,
action: :read
)
define(:by_id,
get_by: [:id],
action: :read
)
define(:by_solar_system_id,
get_by: [:solar_system_id],
action: :read
)
define(:find_by_name, action: :find_by_name)
define(:get_wh_class_a, action: :get_wh_class_a)
define(:get_trig_systems, action: :get_trig_systems)
end
actions do
default_accept [
:solar_system_id,
:region_id,
:constellation_id,
:solar_system_name,
:solar_system_name_lc,
:constellation_name,
:region_name,
:system_class,
:security,
:type_description,
:class_title,
:is_shattered,
:effect_name,
:effect_power,
:statics,
:wandering,
:triglavian_invasion_status,
:sun_type_id
]
defaults [:read, :destroy, :update]
create :create do
primary? true
upsert? true
upsert_identity :solar_system_id
upsert_fields [
:region_id,
:constellation_id,
:solar_system_name,
:solar_system_name_lc,
:constellation_name,
:region_name,
:system_class,
:security,
:type_description,
:class_title,
:is_shattered,
:effect_name,
:effect_power,
:statics,
:wandering,
:triglavian_invasion_status,
:sun_type_id
]
end
read :find_by_name do
argument(:name, :string, allow_nil?: false)
filter(expr(contains(solar_system_name_lc, string_downcase(^arg(:name)))))
end
read :get_wh_class_a do
filter(expr(system_class == 1))
end
read :get_trig_systems do
filter(expr(triglavian_invasion_status != "Normal"))
end
end
attributes do
uuid_primary_key :id
attribute :region_id, :integer
attribute :constellation_id, :integer
attribute :solar_system_id, :integer
attribute :solar_system_name, :string
attribute :solar_system_name_lc, :string
attribute :constellation_name, :string
attribute :region_name, :string
attribute :system_class, :integer
attribute :security, :string
attribute :type_description, :string
attribute :class_title, :string
attribute :is_shattered, :boolean
attribute :effect_name, :string
attribute :effect_power, :integer
attribute :statics, {:array, :string} do
allow_nil?(true)
default([])
end
attribute :wandering, {:array, :string} do
allow_nil?(true)
default([])
end
attribute :triglavian_invasion_status, :string
attribute :sun_type_id, :integer
create_timestamp(:inserted_at)
update_timestamp(:updated_at)
end
identities do
identity :solar_system_id, [:solar_system_id] do
pre_check?(true)
end
end
end