defmodule ToweropsWeb.GraphQL.Resolvers.Agent do @moduledoc "GraphQL resolvers for agent queries and mutations." alias Towerops.Agents alias Towerops.Agents.AgentToken alias ToweropsWeb.GraphQL.Resolvers.Helpers alias ToweropsWeb.ScopedResource def list(_parent, _args, %{context: %{organization_id: org_id}}) do agents = Agents.list_organization_agent_tokens(org_id) {:ok, agents} end def list(_parent, _args, _resolution), do: Helpers.authentication_error() def get(_parent, %{id: id}, %{context: %{organization_id: org_id}}) do case ScopedResource.fetch(AgentToken, id, org_id) do {:ok, agent} -> {:ok, agent} {:error, _reason} -> {:error, "Agent not found"} end end def get(_parent, _args, _resolution), do: Helpers.authentication_error() def create(_parent, %{name: name}, %{context: %{organization_id: org_id}}) do case Agents.create_agent_token(org_id, name) do {:ok, agent_token, raw_token} -> {:ok, %{ id: agent_token.id, name: agent_token.name, enabled: agent_token.enabled, token: raw_token, inserted_at: agent_token.inserted_at }} {:error, changeset} -> {:error, Helpers.format_changeset_errors(changeset)} end end def create(_parent, _args, _resolution), do: Helpers.authentication_error() def delete(_parent, %{id: id}, %{context: %{organization_id: org_id}}) do case ScopedResource.fetch(AgentToken, id, org_id) do {:ok, _agent} -> case Agents.delete_agent_token(id) do {:ok, _} -> {:ok, %{success: true, message: "Agent deleted"}} {:error, _} -> {:ok, %{success: false, message: "Could not delete agent"}} end {:error, _reason} -> {:error, "Agent not found"} end end def delete(_parent, _args, _resolution), do: Helpers.authentication_error() end