defmodule Mix.Tasks.EventStore.Drop do @moduledoc """ Drop the database for the EventStore. The event stores to drop are the ones specified under the `:event_stores` option in the current app configuration. However, if the `-e` option is given, it replaces the `:event_stores` config. ## Examples mix event_store.drop -e MyApp.EventStore ## Command line options * `-e`, `--eventstore` - the event store to drop * `--quiet` - do not log output """ use Mix.Task import Mix.EventStore alias EventStore.Tasks.Drop @shortdoc "Drop the database for the EventStore" @switches [ quiet: :boolean, eventstore: [:string, :keep] ] @aliases [ e: :eventstore, q: :quiet ] @doc false def run(args) do event_stores = parse_event_store(args) {opts, _} = OptionParser.parse!(args, strict: @switches, aliases: @aliases) {:ok, _} = Application.ensure_all_started(:postgrex) {:ok, _} = Application.ensure_all_started(:ssl) Enum.each(event_stores, fn event_store -> ensure_event_store!(event_store, args) config = event_store.config() if skip_safety_warnings?() or Mix.shell().yes?( "Are you sure you want to drop the " <> inspect(event_store) <> " database?" ) do Drop.exec(config, Keyword.put(opts, :is_mix, true)) end end) end defp skip_safety_warnings? do Mix.Project.config()[:start_permanent] != true end end