You're seeing just the callback delete_stream, go back to EventStore module for more information.
Link to this callback

delete_stream(stream_uuid, expected_version, type, opts)

View Source


  stream_uuid :: String.t(),
  expected_version :: :any_version | :stream_exists | non_neg_integer(),
  type :: :soft | :hard,
  opts :: Keyword.t()
) ::
  | {:error, :stream_not_found}
  | {:error, :stream_deleted}
  | {:error, term()}

Delete an existing stream.

  • stream_uuid identity of the stream to be deleted.

  • expected_version is used for optimistic concurrency checking. You can provide a non-negative integer to specify the expected stream version. This is used to ensure you can only delete a stream if it is at exactly that version.

    You can also provide one of the following values to alter the concurrency checking behaviour:

    • :any_version - No concurrency check, allow any stream version.
    • :stream_exists - Ensure the stream exists, at any version.
  • type - used to indicate how the stream is deleted:

    • :soft - the stream is marked as deleted, but no events are removed.
    • :hard - the stream and its events are permanently deleted from the database. Soft deletion is the default if the type is not provided.

Returns :ok on success or an error tagged tuple on failure.

Soft delete

Will mark the stream as deleted, but will not delete its events. Events from soft deleted streams will still appear in the globally ordered all events ($all) stream and in any linked streams.

A soft deleted stream cannot be read nor appended to. Subscriptions to the deleted stream will not receive any events but subscriptions containing linked events from the deleted stream, such as the global all events stream, will still receive events from the deleted stream.

Hard delete

Will permanently delete the stream and its events. This is irreversible and will remove data. Events will be removed from the globally ordered all events stream and any linked streams.

After being hard deleted, a stream can later be appended to and read as if it had never existed.


Soft delete a stream

Delete a stream at any version:

:ok = MyApp.EventStore.delete_stream("stream1", :any_version, :soft)

Delete a stream at an expected version:

:ok = MyApp.EventStore.delete_stream("stream2", 3, :soft)

Delete stream will use soft delete by default so you can omit the type:

:ok = MyApp.EventStore.delete_stream("stream1", :any_version)

Hard delete a stream

Since hard deletes are destructive and irreversible they are disabled by default. To use hard deletes you must first enable them for the event store:

defmodule MyApp.EventStore do
  use EventStore, otp_app: :my_app, enable_hard_deletes: true

Or via config:

# config/config.exs
config :my_app, MyApp.EventStore, enable_hard_deletes: true

Hard delete a stream at any version:

:ok = MyApp.EventStore.delete_stream("stream1", :any_version, :hard)

Hard delete a stream that should exist:

:ok = MyApp.EventStore.delete_stream("stream2", :stream_exists, :hard)