Lotus.Viz (Lotus v0.16.5)

Copy Markdown View Source

Service functions for managing query visualizations in Lotus storage.

  • CRUD wrappers around Lotus.Storage.QueryVisualization
  • Validation against a %Lotus.Result{} to ensure field references exist and numeric aggregations apply to numeric columns.

Summary

Types

attrs()

@type attrs() :: map()

id()

@type id() :: integer() | binary()

Functions

create_visualization(query_id, attrs)

@spec create_visualization(Lotus.Storage.Query.t() | id(), attrs()) ::
  {:ok, Lotus.Storage.QueryVisualization.t()} | {:error, Ecto.Changeset.t()}

delete_visualization(viz)

@spec delete_visualization(Lotus.Storage.QueryVisualization.t() | id()) ::
  {:ok, Lotus.Storage.QueryVisualization.t()} | {:error, Ecto.Changeset.t()}

list_visualizations(query_id)

@spec list_visualizations(Lotus.Storage.Query.t() | id()) :: [
  Lotus.Storage.QueryVisualization.t()
]

update_visualization(viz, attrs)

@spec update_visualization(Lotus.Storage.QueryVisualization.t(), attrs()) ::
  {:ok, Lotus.Storage.QueryVisualization.t()} | {:error, Ecto.Changeset.t()}

validate_against_result(cfg, result)

@spec validate_against_result(map(), Lotus.Result.t()) :: :ok | {:error, String.t()}

Validates a visualization config against a query result.

Checks:

  • Referenced fields exist in result.columns for x, y, series, and filters
  • Numeric aggregations (:sum, :avg) only apply to numeric columns

This does not persist anything; it is safe to call before create_/update_.