defmodule EventStore.Tasks.Drop do
@moduledoc """
Task to drop the EventStore database.
"""
alias EventStore.Storage.Database
alias EventStore.Storage.Schema
import EventStore.Tasks.Output
@doc """
Runs task
## Parameters
- config: the parsed EventStore config
## Opts
- is_mix: set to `true` if running as part of a Mix task
- quiet: set to `true` to silence output
"""
def exec(config, opts \\ []) do
opts = Keyword.merge([is_mix: false, quiet: false], opts)
schema = Keyword.fetch!(config, :schema)
case schema do
"public" ->
drop_database(config, opts)
_schema ->
drop_schema(config, opts)
end
end
defp drop_database(config, opts) do
case Database.drop(config) do
:ok ->
write_info("The EventStore database has been dropped.", opts)
{:error, :already_down} ->
write_info("The EventStore database has already been dropped.", opts)
{:error, term} ->
raise_msg(
"The EventStore database couldn't be dropped, reason given: #{inspect(term)}.",
opts
)
end
end
defp drop_schema(config, opts) do
case Schema.drop(config) do
:ok ->
write_info("The EventStore schema has been dropped.", opts)
{:error, :already_down} ->
write_info("The EventStore schema has already been dropped.", opts)
{:error, term} ->
raise_msg(
"The EventStore schema couldn't be dropped, reason given: #{inspect(term)}.",
opts
)
end
end
end