defmodule Noizu.Weaviate.Api.Nodes do @moduledoc """ Functions for getting information about the Weaviate nodes. """ require Noizu.Weaviate import Noizu.Weaviate @doc """ Get information about the Weaviate nodes. ## Returns A tuple `{:ok, response}` on successful API call, where `response` is the API response. Returns `{:error, term}` on failure, where `term` contains error details. ## Examples {:ok, response} = Noizu.Weaviate.Api.Nodes.get_information_about_nodes() """ @spec get_information_about_nodes(options :: any) :: {:ok, any()} | {:error, any()} def get_information_about_nodes(options \\ nil) do query_params = [] |> then(& options[:output] && [{"output", options[:output]} | &1] || &1) |> Enum.map(fn {k, v} -> "#{k}=#{v}" end) |> Enum.join("&") url = "#{Noizu.Weaviate.weaviate_base()}v1/nodes#{if query_params != "", do: "?" <> query_params, else: ""}" # NodeList Noizu.Weaviate.api_call(:get, url, nil, Noizu.Weaviate.Struct.Node, options) end @doc """ Get nodes for a specific collection/class. ## Parameters - `class_name` (required) - The name of the class/collection. - `options` (optional) - Additional options for the API call. Supports `:output` ("minimal" or "verbose"). ## Returns A tuple `{:ok, response}` on successful API call, where `response` is the API response. Returns `{:error, term}` on failure, where `term` contains error details. ## Examples {:ok, response} = Noizu.Weaviate.Api.Nodes.get_nodes_for_collection("Product") {:ok, response} = Noizu.Weaviate.Api.Nodes.get_nodes_for_collection("Product", output: "verbose") """ @spec get_nodes_for_collection(String.t(), options :: any) :: {:ok, any()} | {:error, any()} def get_nodes_for_collection(class_name, options \\ nil) do query_params = [] |> then(& options[:output] && [{"output", options[:output]} | &1] || &1) |> Enum.map(fn {k, v} -> "#{k}=#{v}" end) |> Enum.join("&") url = "#{Noizu.Weaviate.weaviate_base()}v1/nodes/#{class_name}#{if query_params != "", do: "?" <> query_params, else: ""}" Noizu.Weaviate.api_call(:get, url, nil, Noizu.Weaviate.Struct.Node, options) end end