Lotus.Viz (Lotus v1.1.0)

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.

Content changes

create_visualization/3, update_visualization/3 and delete_visualization/2 take opts with a :context, opaque caller data such as the current user. Each write fires the :before_content_change and :after_content_change middleware with resource :visualization. A plug that halts makes the function return {:error, {:halted, reason}} and nothing is written. See Lotus.Middleware.

Summary

Types

attrs()

@type attrs() :: map()

id()

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

Functions

create_visualization(query_or_id, attrs, opts \\ [])

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

delete_visualization(viz_or_id, opts \\ [])

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

list_visualizations(query_id)

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

update_visualization(viz, attrs, opts \\ [])

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_.