Packages

Plugin to generate a clean architecture scaffold.

Current section

Files

Jump to
scaffold_ca priv create_structure templates application.txt
Raw

priv/create_structure/templates/application.txt

defmodule {module_name}.Application do
alias {module_name}.EntryPoint.ApiRest
alias {module_name}.Config.{AppConfig, ConfigHolder}
alias {module_name}.Utils.CustomTelemetry
alias {module_name}.Utils.CertificatesAdmin
use Application
require Logger
def start(_type, _args) do
config = AppConfig.load_config()
in_test? = {:ok, Mix.env() == :test}
CertificatesAdmin.setup()
children = with_plug_server(config) ++ application_children(in_test?)
CustomTelemetry.custom_telemetry_events()
opts = [strategy: :one_for_one, name: {module_name}.Supervisor]
Supervisor.start_link(children, opts)
end
defp with_plug_server(%AppConfig{enable_server: true, http_port: port}) do
Logger.debug("Configure Http server in port #{inspect(port)}. ")
[
{
Plug.Cowboy,
scheme: :http,
plug: ApiRest,
options: [
port: port
]
}
]
end
defp with_plug_server(%AppConfig{enable_server: false}), do: []
def application_children({:ok, true} = _test_env),
do: [
{ConfigHolder, AppConfig.load_config()},
{TelemetryMetricsPrometheus, [metrics: CustomTelemetry.metrics()]}
]
def application_children(_other_env) do
[
{ConfigHolder, AppConfig.load_config()},
{TelemetryMetricsPrometheus, [metrics: CustomTelemetry.metrics()]}
]
end
end