PhoenixKit.Settings.Queries (phoenix_kit v1.7.102)

Copy Markdown View Source

Ecto queries for Settings context.

This module encapsulates all database queries for settings management, providing a centralized location for query logic.

Summary

Functions

Deletes a setting by key. Returns {:ok, setting} or {:error, :not_found}.

Gets a setting record by key.

Gets a setting record by UUID.

Inserts a new setting.

Lists all settings ordered by key.

Lists settings whose keys start with the given prefix.

Lists settings whose keys match any of the given prefixes in a single query.

Lists setting records for specific keys.

Gets all settings as a list of {key, value} tuples.

Lists settings for specific keys as a list of {key, value} tuples.

Lists settings by keys with JSON priority as a list of {key, value} tuples.

Executes a transaction with multiple operations.

Updates an existing setting.

Functions

delete_setting_by_key(key)

Deletes a setting by key. Returns {:ok, setting} or {:error, :not_found}.

get_setting_by_key(key)

Gets a setting record by key.

Examples

iex> PhoenixKit.Settings.Queries.get_setting_by_key("time_zone")
%Setting{key: "time_zone", value: "0"}

iex> PhoenixKit.Settings.Queries.get_setting_by_key("non_existent")
nil

get_setting_by_uuid(uuid)

Gets a setting record by UUID.

insert_setting(changeset)

Inserts a new setting.

Examples

iex> %Setting{} |> Setting.changeset(%{key: "theme", value: "dark"})
...> |> PhoenixKit.Settings.Queries.insert_setting()
{:ok, %Setting{}}

list_settings()

Lists all settings ordered by key.

Examples

iex> PhoenixKit.Settings.Queries.list_settings()
[%Setting{key: "date_format", value: "Y-m-d"}, %Setting{key: "time_zone", value: "0"}, ...]

list_settings_by_key_prefix(prefix)

Lists settings whose keys start with the given prefix.

Examples

iex> PhoenixKit.Settings.Queries.list_settings_by_key_prefix("integration:google:")
[%Setting{key: "integration:google:default", ...}, %Setting{key: "integration:google:personal", ...}]

list_settings_by_key_prefixes(prefixes)

Lists settings whose keys match any of the given prefixes in a single query.

More efficient than calling list_settings_by_key_prefix/1 in a loop.

Examples

iex> PhoenixKit.Settings.Queries.list_settings_by_key_prefixes(["integration:google:", "integration:openrouter:"])
[%Setting{key: "integration:google:default", ...}, %Setting{key: "integration:openrouter:default", ...}]

list_settings_by_keys(keys)

Lists setting records for specific keys.

Examples

iex> PhoenixKit.Settings.Queries.list_settings_by_keys(["time_zone"])
[%Setting{key: "time_zone", value: "0"}]

list_settings_key_values()

Gets all settings as a list of {key, value} tuples.

Examples

iex> PhoenixKit.Settings.Queries.list_settings_key_values()
[{"time_zone", "0"}, {"date_format", "Y-m-d"}]

list_settings_key_values_by_keys(keys)

Lists settings for specific keys as a list of {key, value} tuples.

Examples

iex> PhoenixKit.Settings.Queries.list_settings_key_values_by_keys(["time_zone", "date_format"])
[{"time_zone", "0"}, {"date_format", "Y-m-d"}]

list_settings_with_json_priority_by_keys(keys)

Lists settings by keys with JSON priority as a list of {key, value} tuples.

Returns a list where value_json is used if present, otherwise falls back to the string value.

Examples

iex> PhoenixKit.Settings.Queries.list_settings_with_json_priority_by_keys(["theme"])
[{"theme", %{"primary" => "#3b82f6"}}]

transaction(multi)

Executes a transaction with multiple operations.

Examples

iex> Ecto.Multi.new()
...> |> multi_operation()
...> |> PhoenixKit.Settings.Queries.transaction()
{:ok, result}

update_setting(changeset)

Updates an existing setting.

Examples

iex> setting |> Setting.update_changeset(%{value: "light"})
...> |> PhoenixKit.Settings.Queries.update_setting()
{:ok, %Setting{}}