defmodule EventStore.Tasks.Create do
@moduledoc """
Task to create the EventStore
"""
import EventStore.Tasks.Output
alias EventStore.Storage.Database
alias EventStore.Storage.Schema
@doc """
Runs database and schema create 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)
case Database.create(config) do
:ok ->
write_info("The EventStore database has been created.", opts)
{:error, :already_up} ->
write_info("The EventStore database already exists.", opts)
{:error, term} ->
raise_msg(
"The EventStore database couldn't be created, reason given: #{inspect(term)}.",
opts
)
end
case Schema.create(config) do
:ok ->
write_info("The EventStore schema has been created.", opts)
{:error, :already_up} ->
write_info("The EventStore schema already exists.", opts)
{:error, term} ->
raise_msg(
"The EventStore schema couldn't be created, reason given: #{inspect(term)}.",
opts
)
end
end
end