View Source Bonfire.Common.QueryModules (bonfire v0.3.5-classic-beta.7)

Properly query some data using the appropriate module depending on its schema.

Back by a global cache of known query_modules to be queried by their schema, or vice versa.

Use of the QueryModules Service requires:

  1. Exporting queries_module/0 in relevant modules (in schemas pointing to query modules and/or in query modules pointing to schemas), returning a Module atom
  2. To populate :pointers, :search_path in config the list of OTP applications where query_modules are declared.
  3. Start the Bonfire.Common.QueryModules application before querying.
  4. OTP 21.2 or greater, though we recommend using the most recent release available.

While this module is a GenServer, it is only responsible for setup of the cache and then exits with :ignore having done so. It is not recommended to restart the service as this will lead to a stop the world garbage collection of all processes and the copying of the entire cache to each process that has queried it since its last local garbage collection.

Link to this section Summary

Types

A query is either a query_module name atom or (Pointer) id binary

Functions

Returns a specification to start this module under a supervisor.

Look up a Queryable by name or id, throw :not_found if not found.

Get a Queryable identified by name or id.

Look up many ids at once, throw :not_found if any of them are not found

Populates the global cache with query_module data via introspection.

Link to this section Types

@type query() :: binary() | atom()

A query is either a query_module name atom or (Pointer) id binary

Link to this section Functions

Link to this function

apply_error(error, args)

View Source

Returns a specification to start this module under a supervisor.

See Supervisor.

Link to this function

maybe_query(schema, filters \\ [], fallback_fun \\ &apply_error/2)

View Source
Link to this function

maybe_query_module(query)

View Source
Link to this function

query_function_error(error, args, level \\ :info)

View Source

Look up a Queryable by name or id, throw :not_found if not found.

@spec query_module(query :: query()) :: {:ok, atom()} | {:error, :not_found}

Get a Queryable identified by name or id.

@spec query_modules([binary() | atom()]) :: [binary()]

Look up many ids at once, throw :not_found if any of them are not found

@spec start_link(ignored :: term()) :: GenServer.on_start()

Populates the global cache with query_module data via introspection.