From 1dbb8926ede8566ec2e3911e7d0ef68e5c2bca63 Mon Sep 17 00:00:00 2001 From: Graham McIntire Date: Fri, 13 Feb 2026 16:16:00 -0600 Subject: [PATCH] fix: update remaining gaiia graphql status fields for object schema Gaiia migrated all status fields from scalar enums to object types, not just AccountStatus. Update BillingSubscription.status, InventoryItem.status, and nested billingSubscriptions.status in the accounts query to request { id name } subfields and extract the name value in sync mappers. --- lib/towerops/gaiia/client.ex | 15 ++++++++++++--- lib/towerops/gaiia/sync.ex | 6 +++--- test/towerops/gaiia/sync_test.exs | 6 +++--- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/lib/towerops/gaiia/client.ex b/lib/towerops/gaiia/client.ex index 2eca59e2..c97d2059 100644 --- a/lib/towerops/gaiia/client.ex +++ b/lib/towerops/gaiia/client.ex @@ -40,7 +40,10 @@ defmodule Towerops.Gaiia.Client do edges { node { id - status + status { + id + name + } } } } @@ -93,7 +96,10 @@ defmodule Towerops.Gaiia.Client do edges { node { id - status + status { + id + name + } ipAddressV4 model { name @@ -127,7 +133,10 @@ defmodule Towerops.Gaiia.Client do edges { node { id - status + status { + id + name + } productVersion { product { name diff --git a/lib/towerops/gaiia/sync.ex b/lib/towerops/gaiia/sync.ex index 6a9c6993..9988056a 100644 --- a/lib/towerops/gaiia/sync.ex +++ b/lib/towerops/gaiia/sync.ex @@ -79,7 +79,7 @@ defmodule Towerops.Gaiia.Sync do defp map_account(node) do subs = get_in(node, ["billingSubscriptions", "edges"]) || [] - active_count = Enum.count(subs, &(&1["node"]["status"] == "Active")) + active_count = Enum.count(subs, &(get_in(&1, ["node", "status", "name"]) == "Active")) %{ gaiia_id: node["id"], @@ -119,7 +119,7 @@ defmodule Towerops.Gaiia.Sync do %{ gaiia_id: node["id"], name: get_in(node, ["model", "name"]), - status: node["status"], + status: get_in(node, ["status", "name"]), serial_number: nil, mac_address: nil, ip_address: node["ipAddressV4"], @@ -142,7 +142,7 @@ defmodule Towerops.Gaiia.Sync do %{ gaiia_id: node["id"], account_gaiia_id: get_in(node, ["entity", "id"]), - status: node["status"], + status: get_in(node, ["status", "name"]), product_name: get_in(node, ["productVersion", "product", "name"]), mrr_amount: mrr_amount, currency: get_in(node, ["productVersion", "currency"]), diff --git a/test/towerops/gaiia/sync_test.exs b/test/towerops/gaiia/sync_test.exs index ab60260b..9c600437 100644 --- a/test/towerops/gaiia/sync_test.exs +++ b/test/towerops/gaiia/sync_test.exs @@ -154,7 +154,7 @@ defmodule Towerops.Gaiia.SyncTest do %{ "node" => %{ "id" => "sub-1", - "status" => "Active" + "status" => %{"id" => "sub-status-1", "name" => "Active"} } } ] @@ -208,7 +208,7 @@ defmodule Towerops.Gaiia.SyncTest do %{ "node" => %{ "id" => "item-1", - "status" => "Active", + "status" => %{"id" => "inv-status-1", "name" => "Active"}, "ipAddressV4" => "10.0.0.1", "model" => %{ "name" => "airFiber 5XHD", @@ -236,7 +236,7 @@ defmodule Towerops.Gaiia.SyncTest do %{ "node" => %{ "id" => "sub-1", - "status" => "Active", + "status" => %{"id" => "sub-status-1", "name" => "Active"}, "productVersion" => %{ "product" => %{"name" => "100Mbps Unlimited"}, "price" => 7999,