lib/buffer/pusher_worker.ex

defmodule SuperCache.Queue.Worker do
  @moduledoc """
  Pushs data from queue to database (disk)
  """

  use GenServer

  require Logger

  alias __MODULE__

  alias SuperCache.Queue

  ## API


  @doc """
  Gets number of record has push to database.
  """
  def get_counter() do

  end

  def start_link([counter]) do
    Logger.info("start store data to db worker")
    GenServer.start_link(__MODULE__, counter)
  end

    ## callbacks


  @impl true
  def init(counter) do
    alias Db.Storage
    :ok = Storage.initDb()

    schedule_work(100)
    {:ok, counter}
  end

  @impl true
  def handle_info(:work, counter) do
    counter =
    case Queue.get() do
      nil ->
        # sleep more if queue doesn't have data.

        schedule_work(1000)
        counter
      student ->
        schedule_work(0)
        counter + 1
    end

    {:noreply, counter}
  end

  defp schedule_work(time) do
    # TO-DO: improve this.

    Process.send_after(self(), :work , time)
  end

end