Packages
blossom
0.23.0
0.29.3
0.29.2
0.29.1
0.29.0
0.28.0
0.27.3
0.27.2
0.27.1
0.27.0
0.26.3
0.26.2
0.26.1
0.26.0
0.25.3
0.25.2
0.25.1
0.25.0
0.24.1
0.24.0
0.23.5
0.23.4
0.23.3
0.23.2
0.23.1
0.23.0
0.22.1
0.22.0
0.21.8
0.21.7
0.21.6
0.21.5
0.21.4
0.21.3
0.21.2
0.21.1
0.21.0
0.20.4
0.20.3
0.20.2
0.20.1
0.20.0
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.19.0
0.18.1
0.18.0
0.17.4
0.17.3
0.17.2
0.17.1
0.17.0
0.16.0
0.15.2
0.15.1
0.15.0
0.14.0
0.13.0
0.12.2
0.12.1
0.12.0
0.11.0
0.10.1
0.10.0
0.9.2
0.9.1
0.9.0
0.8.0
0.7.0
0.6.2
0.6.1
0.6.0
0.5.1
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
Easy identity for easy authentication
Current section
Files
Jump to
Current section
Files
lib/blossom/schemas/casks.ex
defmodule Blossom.Schemas.Casks do
alias Ecto.Changeset
alias KilnCore.Utils
defmacro __using__(opts \\ []) do
quote do
use KilnCore.Schema,
repo: unquote(opts)[:repo],
actions: unquote(opts)[:actions],
private_fields: [:inserted_at, :updated_at],
required_fields: [:name, :realm, :slug],
writable_fields: [
:autojoin,
:autojoin_role,
:id,
:enabled,
:name,
:realm,
:slug
],
reduceable_embeds: %{
"casks_roles" => :casks_roles,
"users" => {:casks_roles, [:users]}
}
import Djinn
@casks_roles Utils.option_or_mod_replace(
@caller,
unquote(opts),
:casks_roles,
CasksRoles,
2
)
@realms Utils.option_or_mod_replace(
@caller,
unquote(opts),
:realms,
Realms,
2
)
@users Utils.option_or_mod_replace(
@caller,
unquote(opts),
:users,
Users,
2
)
schema "casks" do
field(:autojoin, :boolean, default: false)
field(:autojoin_role, :string)
field(:enabled, :boolean, default: false)
field(:name, :string)
field(:slug, :string)
belongs_to(:realms, @realms, foreign_key: :realm)
has_many(:casks_roles, @casks_roles, foreign_key: :cask)
timestamps()
end
def check_constraints(changeset) do
Changeset.unique_constraint(changeset, :slug,
name: :casks_realm_slug_index
)
end
filter_list("id", [o], o)
filter_boolean("autojoin", [o], o)
filter_boolean("enabled", [o], o)
filter_value("name", [o], o)
filter_value("realm", [o], o)
filter_value("slug", [o], o)
def filter_by_params(query, params) do
query
|> filter_by_id(params)
|> filter_by_autojoin(params)
|> filter_by_enabled(params)
|> filter_by_name(params)
|> filter_by_realm(params)
|> filter_by_slug(params)
end
def join_roles(query) do
join(query, :left, [o], cr in @casks_roles,
as: :cr,
on: cr.cask == o.id
)
end
def join_users(query) do
join(query, :left, [o, r: r], u in @users,
as: :u,
on: r.user == u.id
)
end
def prepare_query(_params, embeds) do
Enum.reduce(embeds, @caller, fn embed, query ->
cond do
embed == :casks_roles ->
@caller.join_roles(query)
embed == {:casks_roles, [:users]} ->
query
|> @caller.join_roles()
|> @caller.join_users()
true ->
query
end
end)
end
end
end
end