lib/history_web/live/funding_rate_live.ex

defmodule HistoryWeb.FundingRateLive do
  use HistoryWeb, :live_view
  import HistoryWeb.JobView
  alias History.{FundingRates, FundingRateHistoryJobs}

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

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

    {:ok, socket}
  end

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

    {:noreply, socket}
  end

  @latest_page 0
  @latest_page_size 5

  defp assign_latest_funding_rates(socket) do
    funding_rates = FundingRates.search_latest(page: @latest_page, page_size: @latest_page_size)

    socket
    |> assign(:funding_rates, funding_rates)
  end

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

  defp assign_latest_jobs(socket) do
    jobs =
      FundingRateHistoryJobs.latest(
        page: @latest_page,
        page_size: @latest_page_size
      )

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