# `PhoenixKit.Settings.Queries`
[🔗](https://github.com/BeamLabEU/phoenix_kit/blob/v1.7.164/lib/phoenix_kit/settings/queries.ex#L1)

Ecto queries for Settings context.

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

# `delete_setting_by_key`

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

# `get_setting_by_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`

Gets a setting record by UUID.

# `insert_setting`

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`

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`

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`

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`

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`

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`

Executes a transaction with multiple operations.

## Examples

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

# `update_setting`

Updates an existing setting.

## Examples

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

---

*Consult [api-reference.md](api-reference.md) for complete listing*
