lib/step_flow/models/workflow_definitions/workflow_definition.ex

defmodule StepFlow.WorkflowDefinitions.WorkflowDefinition do
  @moduledoc """
  The WorkflowDefinition context.
  """
  use Ecto.Schema
  import Ecto.Changeset

  require Logger
  alias StepFlow.WorkflowDefinitions.WorkflowDefinition

  schema "step_flow_workflow_definition" do
    field(:schema_version, :string)
    field(:identifier, :string)
    field(:label, :string, default: "")
    field(:icon, :string, default: "")
    field(:version_major, :integer)
    field(:version_minor, :integer)
    field(:version_micro, :integer)
    field(:tags, {:array, :string}, default: [])
    field(:is_live, :boolean, default: false)
    field(:deleted, :boolean, default: false)
    field(:notification_hooks, {:array, :map})
    field(:steps, {:array, :map}, default: [])
    field(:start_parameters, {:array, :map}, default: [])
    field(:parameters, {:array, :map}, default: [])

    timestamps()
  end

  @doc false
  def changeset(%WorkflowDefinition{} = workflow_definition, attrs) do
    workflow_definition
    |> cast(attrs, [
      :schema_version,
      :identifier,
      :label,
      :icon,
      :version_major,
      :version_minor,
      :version_micro,
      :tags,
      :is_live,
      :deleted,
      :notification_hooks,
      :steps,
      :start_parameters,
      :parameters
    ])
    |> validate_required([
      :schema_version,
      :identifier,
      :version_major,
      :version_minor,
      :version_micro
    ])
    |> unique_constraint(
      :identifier,
      name: :workflow_identifier_index
    )
  end
end