lib/step_flow/view/worker_status_view.ex

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

  def render("index.json", %{data: workers_status, total: total}) do
    %{
      data:
        render_many(workers_status, WorkerStatusView, "worker_status.json", as: :worker_status),
      total: total
    }
  end

  def render("worker_status.json", %{worker_status: worker_status}) do
    current_job =
      case worker_status.current_job do
        nil ->
          nil

        job_status ->
          %{
            execution_duration: job_status.execution_duration,
            job_id: job_status.job_id,
            status: job_status.status
          }
      end

    %{
      activity: worker_status.activity,
      current_job: current_job,
      description: worker_status.description,
      direct_messaging_queue_name: worker_status.direct_messaging_queue_name,
      inserted_at: DateTime.from_naive!(worker_status.inserted_at, "Etc/UTC"),
      instance_id: worker_status.instance_id,
      label: worker_status.label,
      queue_name: worker_status.queue_name,
      sdk_version: worker_status.sdk_version,
      short_description: worker_status.short_description,
      system_info: worker_status.system_info,
      updated_at: DateTime.from_naive!(worker_status.updated_at, "Etc/UTC"),
      version: worker_status.version
    }
  end
end