Packages

phx_crud provides standard macros for common phoenix crud operations

Current section

Files

Jump to
phx_crud lib macros delete_macro.ex
Raw

lib/macros/delete_macro.ex

defmodule PhxCrud.DeleteRecord do
defmacro __using__(options \\ []) do
quote location: :keep do
@options unquote(options)
@phx_crud_model @options[:model] || @model
@phx_crud_repo @options[:repo] || Application.get_env(:phx_crud, :repo)
@phx_crud_error_view @options[:error_view] || Application.get_env(:phx_crud, :error_view)
@phx_crud_view @options[:view] || @view
if !@phx_crud_repo do
raise "Please specify phx_crud Repo in config or while calling this macro"
end
if !@phx_crud_error_view do
raise "Please specify phx_crud error_view in config or while calling this macro"
end
if !@phx_crud_view do
raise "Please specify phx_crud view in config or while calling this macro"
end
def delete(conn, %{"id" => id}) do
case @phx_crud_repo.get(@phx_crud_model, id) do
nil ->
conn
|> put_status(404)
|> render(@phx_crud_error_view, :error, code: 404, message: "Record not found")
record ->
case @phx_crud_repo.delete(record) do
{:ok, struct} ->
conn
|> render(@phx_crud_view, :show, record: struct)
{:error, changeset} ->
conn
|> put_status(422)
|> render(
@phx_crud_error_view,
:errors,
code: 422,
message: "Error deleting this record",
changeset: changeset
)
end
end
end
end
end
end