Packages
phoenix_kit
1.7.76
1.7.210
1.7.209
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/repo_helper.ex
defmodule PhoenixKit.RepoHelper do
@moduledoc """
Helper for dynamically resolving the repository to use.
This module provides functions to get the appropriate repository
based on configuration. It will use the configured repo from
the parent application if available, otherwise fall back to
the built-in PhoenixKit.Repo for development/testing.
"""
alias PhoenixKit.Config
@doc """
Gets the repository module to use.
Expects repo to be configured via PhoenixKit.Config.get(:repo).
Raises an error if no repo is configured.
"""
def repo do
case Config.get(:repo, nil) do
nil ->
raise """
No repository configured for PhoenixKit.
Please configure a repository in your application:
config :phoenix_kit, repo: MyApp.Repo
"""
repo when is_atom(repo) ->
repo
end
end
@doc """
Delegates to the configured repo's get_by function.
"""
def get_by(queryable, clauses, opts \\ []) do
repo().get_by(queryable, clauses, opts)
end
@doc """
Delegates to the configured repo's get function.
"""
def get(queryable, id, opts \\ []) do
repo().get(queryable, id, opts)
end
@doc """
Delegates to the configured repo's get! function.
"""
def get!(queryable, id, opts \\ []) do
repo().get!(queryable, id, opts)
end
@doc """
Delegates to the configured repo's all function.
"""
def all(queryable, opts \\ []) do
repo().all(queryable, opts)
end
@doc """
Delegates to the configured repo's one function.
"""
def one(queryable, opts \\ []) do
repo().one(queryable, opts)
end
@doc """
Delegates to the configured repo's insert function.
"""
def insert(struct_or_changeset, opts \\ []) do
repo().insert(struct_or_changeset, opts)
end
@doc """
Delegates to the configured repo's insert! function.
"""
def insert!(struct_or_changeset, opts \\ []) do
repo().insert!(struct_or_changeset, opts)
end
@doc """
Delegates to the configured repo's update function.
"""
def update(changeset, opts \\ []) do
repo().update(changeset, opts)
end
@doc """
Delegates to the configured repo's delete function.
"""
def delete(struct_or_changeset, opts \\ []) do
repo().delete(struct_or_changeset, opts)
end
@doc """
Delegates to the configured repo's delete_all function.
"""
def delete_all(queryable, opts \\ []) do
repo().delete_all(queryable, opts)
end
@doc """
Delegates to the configured repo's exists? function.
"""
def exists?(queryable, opts \\ []) do
repo().exists?(queryable, opts)
end
@doc """
Delegates to the configured repo's aggregate function.
"""
def aggregate(queryable, aggregate, field, opts \\ []) do
repo().aggregate(queryable, aggregate, field, opts)
end
@doc """
Delegates to the configured repo's query function.
"""
def query(sql, params \\ [], opts \\ []) do
repo().query(sql, params, opts)
end
@doc """
Delegates to the configured repo's query! function.
"""
def query!(sql, params \\ [], opts \\ []) do
repo().query!(sql, params, opts)
end
@doc """
Returns the primary key column name for a given table.
Queries `pg_index` to find the actual PK column. Falls back to `"id"` if
the PK cannot be determined (e.g. table doesn't exist or has a composite PK).
"""
def get_pk_column(table_name) when is_binary(table_name) do
sql = """
SELECT a.attname
FROM pg_index i
JOIN pg_attribute a ON a.attrelid = i.indrelid AND a.attnum = ANY(i.indkey)
WHERE i.indrelid = $1::regclass
AND i.indisprimary
"""
case query(sql, [table_name]) do
{:ok, %{rows: [[col]]}} -> col
_ -> "id"
end
rescue
_ -> "id"
end
@doc """
Delegates to the configured repo's transaction function.
"""
def transaction(fun_or_multi, opts \\ []) do
repo().transaction(fun_or_multi, opts)
end
@doc """
Delegates to the configured repo's preload function.
"""
def preload(struct_or_structs, preloads, opts \\ []) do
repo().preload(struct_or_structs, preloads, opts)
end
@doc """
Delegates to the configured repo's rollback function.
This function is used within transactions to rollback and return an error value.
"""
def rollback(value) do
repo().rollback(value)
end
end