defmodule Ecto.SoftDelete.Schema do @moduledoc """ Contains schema macros to add soft delete fields to a schema """ @doc """ Adds the deleted_at column to a schema defmodule User do use Ecto.Schema import Ecto.SoftDelete.Schema schema "users" do field :email, :string soft_delete_schema() end end Options: - `:auto_exclude_from_queries?` - If false, Ecto.SoftDelete.Repo won't automatically add the necessary clause to filter out soft-deleted rows. See `Ecto.SoftDelete.Repo.prepare_query` for more info. Defaults to `true`. """ defmacro soft_delete_schema(opts \\ []) do filter_tag_definition = unless Keyword.get(opts, :auto_exclude_from_queries?, true) do quote do def skip_soft_delete_prepare_query?, do: true end end quote do field(:deleted_at, :utc_datetime_usec) unquote(filter_tag_definition) end end end