Packages
blossom
0.27.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 Blossom.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: %{
"roles_assignments" => :roles_assignments,
"users" => {:roles_assignments, [:users]}
}
@realms Utils.option_or_mod_replace(
@caller,
unquote(opts),
:realms,
Realms,
2
)
@roles_assignments Utils.option_or_mod_replace(
@caller,
unquote(opts),
:roles_assignments,
RolesAssignments,
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(:roles_assignments, @roles_assignments, foreign_key: :cask)
timestamps()
end
def check_constraints(changeset) do
changeset
|> Changeset.foreign_key_constraint(:realm)
|> Changeset.unique_constraint(:slug,
name: :casks_realm_slug_index
)
end
filter_list("allowed_ids", [c], c, column: id)
filter_list("id", [c], c)
filter_boolean("autojoin", [c], c)
filter_boolean("enabled", [c], c)
filter_value("name", [c], c)
filter_value("realm", [c], c)
filter_value("slug", [c], c)
def filter_by_params(query, params) do
query
|> filter_by_id(params)
|> filter_by_allowed_ids(params)
|> filter_by_autojoin(params)
|> filter_by_enabled(params)
|> filter_by_name(params)
|> filter_by_realm(params)
|> filter_by_slug(params)
end
def join_assignments(query) do
join(query, :left, [c], ra in @roles_assignments,
as: :ra,
on: ra.cask == c.id
)
end
def join_users(query) do
join(query, :left, [c, 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 == :roles_assignments ->
@caller.join_assignments(query)
embed == {:roles_assignments, [:users]} ->
query
|> @caller.join_assignments()
|> @caller.join_users()
true ->
query
end
end)
end
end
end
end