lib/history_web/live/candle_live.ex

defmodule HistoryWeb.CandleLive do
  use HistoryWeb, :live_view
  import HistoryWeb.JobView
  alias History.{Candles, CandleHistoryJobs, Page}

  @impl true
  def mount(_params, _session, socket) do
    Phoenix.PubSub.subscribe(Tai.PubSub, "candle_history_job:*")

    socket =
      socket
      |> assign_latest_candles()
      |> assign_job_schedules()
      |> assign_latest_jobs()

    {:ok, socket}
  end

  @impl true
  def handle_info({:candle_history_job, :update, _}, socket) do
    socket =
      socket
      |> assign_latest_jobs()

    {:noreply, socket}
  end

  defp assign_latest_candles(socket) do
    candles =
      Candles.search_latest(
        page: Page.default_page_number(),
        page_size: Page.small_page_size()
      )

    socket
    |> assign(:latest_candles, candles)
  end

  defp assign_job_schedules(socket) do
    socket
    |> assign(:job_schedules, [])
  end

  defp assign_latest_jobs(socket) do
    jobs =
      CandleHistoryJobs.latest(
        page: Page.default_page_number(),
        page_size: Page.small_page_size()
      )

    socket
    |> assign(:jobs, jobs)
  end
end