lib/step_flow/view/workflow_definition_view.ex

defmodule StepFlow.WorkflowDefinitionView do
  use StepFlow, :view
  alias StepFlow.WorkflowDefinitionView

  def render("index.json", %{
        workflow_definitions: %{data: workflow_definitions, total: total, mode: mode}
      }) do
    %{
      data:
        render_many(
          workflow_definitions,
          WorkflowDefinitionView,
          "workflow_definition_#{mode}.json"
        ),
      total: total
    }
  end

  def render("show.json", %{workflow_definition: workflow_definition}) do
    %{
      data:
        render_one(
          workflow_definition,
          WorkflowDefinitionView,
          "workflow_definition_with_steps.json"
        )
    }
  end

  def render("workflow_definition_full.json", %{workflow_definition: workflow_definition}) do
    %{
      schema_version: workflow_definition.schema_version,
      id: workflow_definition.id,
      identifier: workflow_definition.identifier,
      label: workflow_definition.label,
      icon: workflow_definition.icon,
      is_live: workflow_definition.is_live,
      deleted: workflow_definition.deleted,
      version_major: workflow_definition.version_major,
      version_minor: workflow_definition.version_minor,
      version_micro: workflow_definition.version_micro,
      tags: workflow_definition.tags,
      start_parameters: workflow_definition.start_parameters,
      parameters: workflow_definition.parameters
    }
  end

  def render("workflow_definition_full_with_steps.json", %{
        workflow_definition: workflow_definition
      }) do
    %{
      schema_version: workflow_definition.schema_version,
      id: workflow_definition.id,
      identifier: workflow_definition.identifier,
      label: workflow_definition.label,
      icon: workflow_definition.icon,
      is_live: workflow_definition.is_live,
      deleted: workflow_definition.deleted,
      version_major: workflow_definition.version_major,
      version_minor: workflow_definition.version_minor,
      version_micro: workflow_definition.version_micro,
      tags: workflow_definition.tags,
      start_parameters: workflow_definition.start_parameters,
      parameters: workflow_definition.parameters,
      steps: workflow_definition.steps
    }
  end

  def render("workflow_definition_simple.json", %{workflow_definition: workflow_definition}) do
    %{
      id: workflow_definition.id,
      identifier: workflow_definition.identifier,
      is_live: workflow_definition.is_live,
      label: workflow_definition.label,
      version_major: workflow_definition.version_major,
      version_minor: workflow_definition.version_minor,
      version_micro: workflow_definition.version_micro
    }
  end

  def render("workflow_definition.json", %{workflow_definition: workflow_definition}) do
    %{
      schema_version: workflow_definition.schema_version,
      id: workflow_definition.id,
      identifier: workflow_definition.identifier,
      is_live: workflow_definition.is_live,
      label: workflow_definition.label,
      icon: workflow_definition.icon,
      version_major: workflow_definition.version_major,
      version_minor: workflow_definition.version_minor,
      version_micro: workflow_definition.version_micro,
      tags: workflow_definition.tags,
      start_parameters: workflow_definition.start_parameters,
      parameters: workflow_definition.parameters
    }
  end

  def render("workflow_definition_with_steps.json", %{workflow_definition: workflow_definition}) do
    %{
      id: workflow_definition.id,
      identifier: workflow_definition.identifier,
      is_live: workflow_definition.is_live,
      label: workflow_definition.label,
      icon: workflow_definition.icon,
      version_major: workflow_definition.version_major,
      version_minor: workflow_definition.version_minor,
      version_micro: workflow_definition.version_micro,
      tags: workflow_definition.tags,
      start_parameters: workflow_definition.start_parameters,
      parameters: workflow_definition.parameters,
      steps: workflow_definition.steps
    }
  end

  def render("error.json", %{errors: errors}) do
    %{
      errors: [
        %{
          reason: errors.reason,
          message: Map.get(errors, :message, "Incorrect parameters")
        }
      ]
    }
  end
end