Packages

An Elixir Phoenix Auto Administration Package.

Current section

Files

Jump to
phx_admin lib ex_admin repo.ex
Raw

lib/ex_admin/repo.ex

defmodule PhxAdmin.Repo do
@moduledoc false
require Logger
def repo, do: Application.get_env(:phx_admin, :repo)
def get_assoc_join_model(resource, field) when is_binary(field) do
get_assoc_join_model(resource, String.to_atom(field))
end
def get_assoc_join_model(resource, field) do
res_model = resource.__struct__
case res_model.__schema__(:association, field) do
%Ecto.Association.ManyToMany{queryable: queryable, join_through: join_through} ->
{:ok, {join_through, queryable, :many_to_many}}
%Ecto.Association.Has{queryable: queryable} ->
{:ok, queryable}
%{through: [first, second]} ->
{:ok, {res_model.__schema__(:association, first).related, second}}
_ ->
{:error, :notfound}
end
end
def get_assoc_model(resource, field) when is_binary(field) do
get_assoc_model resource, String.to_atom(field)
end
def get_assoc_model(resource, field) do
case get_assoc_join_model(resource, field) do
{:ok, {assoc, _second, :many_to_many}} ->
{assoc, assoc}
{:ok, {assoc, second}} ->
{assoc.__schema__(:association, second).related, assoc}
{:ok, assoc_model} ->
{assoc_model, field}
error ->
error
end
end
def delete(resource, _params) do
repo().delete resource
end
# V2
#
def insert(changeset) do
repo.insert(changeset)
end
def update(changeset) do
repo.update(changeset)
end
end