defmodule ScaffoldCa.Core.ApplyDrivenAdapterTemplate do
alias ScaffoldCa.Utils.StringContent
alias ScaffoldCa.Utils.FileGenerator
alias ScaffoldCa.Utils.Injector
@project_da_path "lib/driven_adapters"
@poject_mix_file "mix.exs"
def create_driven_adapter(app_name, da_name, type) do
with {:ok, _app_snake_name, app_camel_name} <- StringContent.format_name(app_name),
{:ok, da_snake_name, da_camel_name} <- StringContent.format_name(da_name) do
{:ok, project_da_path, template_path, token_list} = create(app_camel_name, da_camel_name, da_snake_name, type)
FileGenerator.create_file(project_da_path, template_path, token_list)
else
err -> Mix.raise("Invalid name indicated: " <> elem(err, 2))
end
end
defp create(app_camel_name, _da_camel_name, _da_snake_name, :secretsmanager) do
folder_secrets_path = "#{@project_da_path}/secrets/"
file_secrets_path = "#{folder_secrets_path}secrets_manager.ex"
token_list = [
%{name: "{module_name}", value: app_camel_name},
%{name: "{da_name}", value: "secrets_manager"}
]
template_path = "/priv/create_structure/templates/secret_adapter.txt"
if !File.exists?(@project_da_path) do
File.mkdir!(@project_da_path)
end
if !File.exists?(folder_secrets_path) do
File.mkdir!(folder_secrets_path)
end
inject_dependencies(~s|{:ex_aws_secretsmanager, "~> 2.0"}|)
Mix.shell().info("Dependency ex_aws_secretsmanager added")
{:ok, file_secrets_path, template_path, token_list}
end
defp create(_app_camel_name, _da_camel_name, _da_snake_name, _invalid_da) do
Mix.raise("Invalid driven adapter parameter. Please verify de documentation to see the diferent driven adapters types")
end
defp inject_dependencies(dependency) do
Injector.inject_dependency(@poject_mix_file, dependency)
end
end