defmodule ToweropsWeb.GraphQL.Resolvers.Organization do @moduledoc "GraphQL resolvers for organization queries and mutations." alias Towerops.Alerts alias Towerops.Devices alias Towerops.Organizations alias Towerops.Sites alias ToweropsWeb.GraphQL.Resolvers.Helpers def list_mine(_parent, _args, %{context: %{user: user}}) do orgs = user.id |> Organizations.list_user_organizations() |> Enum.map(fn org -> Map.merge(org, %{ sites_count: Sites.count_organization_sites(org.id), device_count: Devices.count_organization_devices(org.id), active_alerts_count: Alerts.count_active_alerts(org.id) }) end) {:ok, orgs} end def list_mine(_parent, _args, _resolution), do: Helpers.authentication_error() def get(_parent, _args, %{context: %{organization_id: org_id}}) do org = Organizations.get_organization!(org_id) {:ok, org} end def get(_parent, _args, _resolution), do: Helpers.authentication_error() def update(_parent, %{input: input}, %{context: %{organization_id: org_id}}) do org = Organizations.get_organization!(org_id) attrs = Map.new(input, fn {k, v} -> {to_string(k), v} end) case Organizations.update_organization(org, attrs) do {:ok, updated} -> {:ok, updated} {:error, changeset} -> {:error, Helpers.format_changeset_errors(changeset)} end end def update(_parent, _args, _resolution), do: Helpers.authentication_error() end