Current section

Files

Jump to
ex_esdb lib app.ex
Raw

lib/app.ex

defmodule ExESDB.App do
@moduledoc """
This module is used to start the ExESDB system.
"""
use Application,
otp_app: :ex_esdb
alias ExESDB.Options, as: Options
alias ExESDB.Themes, as: Themes
require Logger
require Phoenix.PubSub
@impl true
def start(_type, _args) do
# Support umbrella configuration patterns
# Check if there's an :otp_app in the application environment
otp_app = Application.get_env(:ex_esdb, :otp_app, :ex_esdb)
# Set the context for configuration access
Options.set_context(otp_app)
config = Options.app_env(otp_app)
store_id = config[:store_id]
Logger.warning("Attempting to start ExESDB with options: #{inspect(config, pretty: true)}")
Logger.warning("Using configuration from OTP app: #{inspect(otp_app)}")
# Pass the otp_app to the system configuration
enhanced_config = Keyword.put(config, :otp_app, otp_app)
children = [
{ExESDB.System, enhanced_config}
]
opts = [strategy: :one_for_one, name: ExESDB.Supervisor]
res = Supervisor.start_link(children, opts)
IO.puts("#{Themes.app(self(), "is UP for store #{inspect(store_id)}")}")
res
end
@impl true
def stop(state) do
ExESDB.System.stop(:normal)
Logger.warning("STOPPING APP #{inspect(state, pretty: true)}")
end
end