Current section

Files

Jump to
phoenix priv templates phx.gen.context schema_access_scope.ex
Raw

priv/templates/phx.gen.context/schema_access_scope.ex

alias <%= inspect schema.module %>
alias <%= inspect scope.module %>
@doc """
Subscribes to scoped notifications about any <%= schema.singular %> changes.
The broadcasted messages match the pattern:
* {:created, %<%= inspect schema.alias %>{}}
* {:updated, %<%= inspect schema.alias %>{}}
* {:deleted, %<%= inspect schema.alias %>{}}
"""
def subscribe_<%= schema.plural %>(%<%= inspect scope.alias %>{} = scope) do
key = scope.<%= Enum.join(scope.access_path, ".") %>
Phoenix.PubSub.subscribe(<%= inspect context.base_module %>.PubSub, "<%= scope.name %>:#{key}:<%= schema.plural %>")
end
defp broadcast_<%= schema.singular %>(%<%= inspect scope.alias %>{} = scope, message) do
key = scope.<%= Enum.join(scope.access_path, ".") %>
Phoenix.PubSub.broadcast(<%= inspect context.base_module %>.PubSub, "<%= scope.name %>:#{key}:<%= schema.plural %>", message)
end
@doc """
Returns the list of <%= schema.plural %>.
## Examples
iex> list_<%= schema.plural %>(scope)
[%<%= inspect schema.alias %>{}, ...]
"""
def list_<%= schema.plural %>(%<%= inspect scope.alias %>{} = scope) do
Repo.all_by(<%= inspect schema.alias %>, <%= scope.schema_key %>: scope.<%= Enum.join(scope.access_path, ".") %>)
end
@doc """
Gets a single <%= schema.singular %>.
Raises `Ecto.NoResultsError` if the <%= schema.human_singular %> does not exist.
## Examples
iex> get_<%= schema.singular %>!(scope, 123)
%<%= inspect schema.alias %>{}
iex> get_<%= schema.singular %>!(scope, 456)
** (Ecto.NoResultsError)
"""
def get_<%= schema.singular %>!(%<%= inspect scope.alias %>{} = scope, <%= primary_key %>) do
Repo.get_by!(<%= inspect schema.alias %>, <%= primary_key %>: <%= primary_key %>, <%= scope.schema_key %>: scope.<%= Enum.join(scope.access_path, ".") %>)
end
@doc """
Creates a <%= schema.singular %>.
## Examples
iex> create_<%= schema.singular %>(scope, %{field: value})
{:ok, %<%= inspect schema.alias %>{}}
iex> create_<%= schema.singular %>(scope, %{field: bad_value})
{:error, %Ecto.Changeset{}}
"""
def create_<%= schema.singular %>(%<%= inspect scope.alias %>{} = scope, attrs) do
with {:ok, <%= schema.singular %> = %<%= inspect schema.alias %>{}} <-
%<%= inspect schema.alias %>{}
|> <%= inspect schema.alias %>.changeset(attrs, scope)
|> Repo.insert() do
broadcast_<%= schema.singular %>(scope, {:created, <%= schema.singular %>})
{:ok, <%= schema.singular %>}
end
end
@doc """
Updates a <%= schema.singular %>.
## Examples
iex> update_<%= schema.singular %>(scope, <%= schema.singular %>, %{field: new_value})
{:ok, %<%= inspect schema.alias %>{}}
iex> update_<%= schema.singular %>(scope, <%= schema.singular %>, %{field: bad_value})
{:error, %Ecto.Changeset{}}
"""
def update_<%= schema.singular %>(%<%= inspect scope.alias %>{} = scope, %<%= inspect schema.alias %>{} = <%= schema.singular %>, attrs) do
true = <%= schema.singular %>.<%= scope.schema_key %> == scope.<%= Enum.join(scope.access_path, ".") %>
with {:ok, <%= schema.singular %> = %<%= inspect schema.alias %>{}} <-
<%= schema.singular %>
|> <%= inspect schema.alias %>.changeset(attrs, scope)
|> Repo.update() do
broadcast_<%= schema.singular %>(scope, {:updated, <%= schema.singular %>})
{:ok, <%= schema.singular %>}
end
end
@doc """
Deletes a <%= schema.singular %>.
## Examples
iex> delete_<%= schema.singular %>(scope, <%= schema.singular %>)
{:ok, %<%= inspect schema.alias %>{}}
iex> delete_<%= schema.singular %>(scope, <%= schema.singular %>)
{:error, %Ecto.Changeset{}}
"""
def delete_<%= schema.singular %>(%<%= inspect scope.alias %>{} = scope, %<%= inspect schema.alias %>{} = <%= schema.singular %>) do
true = <%= schema.singular %>.<%= scope.schema_key %> == scope.<%= Enum.join(scope.access_path, ".") %>
with {:ok, <%= schema.singular %> = %<%= inspect schema.alias %>{}} <-
Repo.delete(<%= schema.singular %>) do
broadcast_<%= schema.singular %>(scope, {:deleted, <%= schema.singular %>})
{:ok, <%= schema.singular %>}
end
end
@doc """
Returns an `%Ecto.Changeset{}` for tracking <%= schema.singular %> changes.
## Examples
iex> change_<%= schema.singular %>(scope, <%= schema.singular %>)
%Ecto.Changeset{data: %<%= inspect schema.alias %>{}}
"""
def change_<%= schema.singular %>(%<%= inspect scope.alias %>{} = scope, %<%= inspect schema.alias %>{} = <%= schema.singular %>, attrs \\ %{}) do
true = <%= schema.singular %>.<%= scope.schema_key %> == scope.<%= Enum.join(scope.access_path, ".") %>
<%= inspect schema.alias %>.changeset(<%= schema.singular %>, attrs, scope)
end