lib/mix/tasks/magma/prompt/gen.ex

defmodule Mix.Tasks.Magma.Prompt.Gen do
  use Magma
  use Mix.Task

  import Magma.MixHelper

  alias Magma.{Artefact, Prompt, Concept}

  @shortdoc "Generates a custom prompt or artefact prompt document"

  @options [
    force: :boolean
  ]

  @requirements ["app.start"]

  def run(args) do
    with_valid_options(args, @options, fn
      _opts, [] ->
        error("artefact type missing")

      _opts, [concept_name, artefact_type] ->
        if artefact_module = Artefact.type(artefact_type) do
          with {:ok, concept} <- Concept.load(concept_name),
               {:ok, _} <- Artefact.Prompt.create(concept, artefact_module) do
            :ok
          else
            error -> handle_error(error)
          end
        else
          error("unknown artefact type: #{artefact_type}")
        end

      _opts, [prompt_name] ->
        Prompt.create(prompt_name)
        |> handle_error()
    end)
  end
end