lib/meilisearch/summarized_task.ex

defmodule Meilisearch.SummarizedTask do
  @moduledoc """
  Manipulate Meilisearch tasks.
  [Task API](https://docs.meilisearch.com/reference/api/tasks.html#summarized-task-object)
  """

  use TypedEctoSchema

  @primary_key false
  typed_embedded_schema null: false do
    field(:taskUid, :integer)
    field(:indexUid, :string, null: true)

    field(:status, Ecto.Enum, values: [:enqueued, :processing, :succeeded, :failed, :canceled])

    field(:type, Ecto.Enum,
      values: [
        :indexCreation,
        :indexUpdate,
        :indexDeletion,
        :indexSwap,
        :documentAdditionOrUpdate,
        :documentDeletion,
        :settingsUpdate,
        :dumpCreation,
        :taskCancelation,
        :taskDeletion,
        :snapshotCreation
      ]
    )

    field(:enqueuedAt, :utc_datetime)
  end

  def cast(data) when is_map(data) do
    %__MODULE__{}
    |> Ecto.Changeset.cast(data, [:taskUid, :indexUid, :status, :type, :enqueuedAt])
    |> Ecto.Changeset.apply_changes()
  end
end