Packages
phoenix_kit
1.7.70
1.7.208
1.7.207
1.7.206
1.7.205
1.7.204
1.7.203
1.7.202
1.7.201
1.7.200
1.7.199
1.7.198
1.7.197
1.7.196
1.7.194
1.7.193
1.7.192
1.7.191
1.7.190
1.7.189
1.7.187
1.7.186
1.7.185
1.7.184
1.7.183
1.7.182
1.7.181
1.7.180
1.7.179
1.7.178
1.7.177
1.7.176
1.7.175
1.7.174
1.7.173
1.7.172
1.7.171
1.7.170
1.7.169
1.7.168
1.7.167
1.7.166
1.7.165
1.7.164
1.7.162
1.7.161
1.7.160
1.7.159
1.7.157
1.7.156
1.7.155
1.7.154
1.7.153
1.7.152
1.7.151
1.7.150
1.7.149
1.7.146
1.7.145
1.7.144
1.7.143
1.7.138
1.7.133
1.7.132
1.7.131
1.7.130
1.7.128
1.7.126
1.7.125
1.7.121
1.7.120
1.7.119
1.7.118
1.7.117
1.7.116
1.7.115
1.7.114
1.7.113
1.7.112
1.7.111
1.7.110
1.7.109
1.7.108
1.7.107
1.7.106
1.7.105
1.7.104
1.7.103
1.7.102
1.7.101
1.7.100
1.7.99
1.7.98
1.7.97
1.7.96
1.7.95
1.7.94
1.7.93
1.7.92
1.7.91
1.7.90
1.7.89
1.7.88
1.7.87
1.7.86
1.7.85
1.7.84
1.7.83
1.7.82
1.7.81
1.7.80
1.7.79
1.7.78
1.7.77
1.7.76
1.7.75
1.7.74
1.7.71
1.7.70
1.7.69
1.7.66
1.7.65
1.7.64
1.7.63
1.7.62
1.7.61
1.7.59
1.7.58
1.7.57
1.7.56
1.7.55
1.7.54
1.7.53
1.7.52
1.7.51
1.7.49
1.7.44
1.7.43
1.7.42
1.7.41
1.7.39
1.7.38
1.7.37
1.7.36
1.7.34
1.7.33
1.7.31
1.7.30
1.7.29
1.7.28
1.7.27
1.7.26
1.7.25
1.7.24
1.7.23
1.7.22
1.7.21
1.7.20
1.7.19
1.7.18
1.7.17
1.7.16
1.7.15
1.7.14
1.7.13
1.7.12
1.7.11
1.7.10
1.7.9
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.6.20
1.6.19
1.6.18
1.6.17
1.6.16
1.6.15
1.6.14
1.6.13
1.6.12
1.6.11
1.6.10
1.6.9
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.5.2
1.5.1
1.5.0
1.4.9
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.2
1.3.1
1.3.0
1.2.10
1.2.9
1.2.8
1.2.7
1.2.5
1.2.4
1.2.2
1.2.1
1.2.0
1.1.0
1.0.0
A foundation for building Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, and more
Current section
Files
Jump to
Current section
Files
lib/phoenix_kit/settings/queries.ex
defmodule PhoenixKit.Settings.Queries do
@moduledoc """
Ecto queries for Settings context.
This module encapsulates all database queries for settings management,
providing a centralized location for query logic.
"""
import Ecto.Query
alias PhoenixKit.RepoHelper
alias PhoenixKit.Settings.Setting
# Single record queries
@doc """
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
"""
def get_setting_by_key(key) when is_binary(key) do
repo().get_by(Setting, key: key)
end
# Multiple records queries
@doc """
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"}, ...]
"""
def list_settings do
Setting
|> order_by([s], s.key)
|> repo().all()
end
@doc """
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"}]
"""
def list_settings_key_values do
Setting
|> select([s], {s.key, s.value})
|> repo().all()
end
@doc """
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"}]
"""
def list_settings_key_values_by_keys(keys) when is_list(keys) do
Setting
|> where([s], s.key in ^keys)
|> select([s], {s.key, s.value})
|> repo().all()
end
@doc """
Lists setting records for specific keys.
## Examples
iex> PhoenixKit.Settings.Queries.list_settings_by_keys(["time_zone"])
[%Setting{key: "time_zone", value: "0"}]
"""
def list_settings_by_keys(keys) when is_list(keys) do
Setting
|> where([s], s.key in ^keys)
|> repo().all()
end
@doc """
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"}}]
"""
def list_settings_with_json_priority_by_keys(keys) when is_list(keys) do
Setting
|> where([s], s.key in ^keys)
|> repo().all()
|> Enum.map(fn setting ->
value = if setting.value_json, do: setting.value_json, else: setting.value
{setting.key, value}
end)
end
# Write operations
@doc """
Inserts a new setting.
## Examples
iex> %Setting{} |> Setting.changeset(%{key: "theme", value: "dark"})
...> |> PhoenixKit.Settings.Queries.insert_setting()
{:ok, %Setting{}}
"""
def insert_setting(changeset) do
repo().insert(changeset)
end
@doc """
Updates an existing setting.
## Examples
iex> setting |> Setting.update_changeset(%{value: "light"})
...> |> PhoenixKit.Settings.Queries.update_setting()
{:ok, %Setting{}}
"""
def update_setting(changeset) do
repo().update(changeset)
end
# Transaction
@doc """
Executes a transaction with multiple operations.
## Examples
iex> Ecto.Multi.new()
...> |> multi_operation()
...> |> PhoenixKit.Settings.Queries.transaction()
{:ok, result}
"""
def transaction(multi) do
repo().transaction(multi)
end
# Private functions
defp repo do
RepoHelper.repo()
end
end