44 lines
1012 B
Elixir
44 lines
1012 B
Elixir
defmodule BDS.RepoBootstrap do
|
|
@moduledoc false
|
|
|
|
use GenServer
|
|
|
|
def start_link(opts \\ []) do
|
|
GenServer.start_link(__MODULE__, opts, name: __MODULE__)
|
|
end
|
|
|
|
def init(opts) do
|
|
:ok = ensure_ready(opts)
|
|
{:ok, %{}}
|
|
end
|
|
|
|
def ensure_ready(opts \\ []) do
|
|
repo = Keyword.get(opts, :repo, BDS.Repo)
|
|
|
|
if Keyword.get(opts, :migrate?, true) do
|
|
:ok = ensure_schema(Keyword.put(opts, :repo, repo))
|
|
end
|
|
|
|
if repo == BDS.Repo do
|
|
case BDS.Projects.ensure_default_project() do
|
|
{:ok, _project} -> :ok
|
|
{:error, reason} -> raise "failed to ensure default project: #{inspect(reason)}"
|
|
end
|
|
else
|
|
:ok
|
|
end
|
|
end
|
|
|
|
def ensure_schema(opts \\ []) do
|
|
repo = Keyword.get(opts, :repo, BDS.Repo)
|
|
migrations_path = Keyword.get(opts, :migrations_path, migrations_path())
|
|
|
|
_versions = Ecto.Migrator.run(repo, migrations_path, :up, all: true)
|
|
:ok
|
|
end
|
|
|
|
def migrations_path do
|
|
Path.expand("../../priv/repo/migrations", __DIR__)
|
|
end
|
|
end
|