Scrivener loads last page when page_number > total_pages

Hey all, I’m trying to figure out why scrivener is not returning an empty list when page_number > total_pages. To handle pagination I’m doing this

  @google_news_table "google_news"

  @google_news_dattrs %{
    paginate: false,
    page: 1,
    page_size: 10
  }

  @list_google_news_dreturn %{
    items: [],
    page_number: 1,
    page_size: 10,
    paginate: false,
    total_entries: 0,
    total_pages: 0
  }

  def google_news_query(google_news_scope) do
    from n in google_news_scope,
    select: %{
      title: n.title,
      url: n.url
    }
  end

  # ==================================================
  #                 QUERY
  # ==================================================
  def list_google_news(viewer, attrs \\ []) do
    %{
      paginate: paginate,
      page: page,
      page_size: page_size,
      start_date: start_date,
      end_date: end_date
    } = Enum.into(attrs, @google_news_dattrs)

    query =
      @google_news_table
      |> google_news_query

    query = unless (start_date && start_date !== "" && end_date && end_date !== ""), do: query, else: Scopes.scope_with_date(query, start_date, end_date)

    if paginate do
      page = Repo.paginate(query, page: page, page_size: page_size)
      items = page.entries

      Map.merge(@list_google_news_dreturn, %{
        paginate: true,
        items: items,
        page_number: page.page_number,
        page_size: page.page_size,
        total_entries: page.total_entries,
        total_pages: page.total_pages
      })
    else
      items = Repo.all(query)

      Map.merge(@list_google_news_dreturn, %{
        items: items,
        total_entries: Enum.count(items)
      })
    end
  end

  def scope_with_date(query, start_date, end_date) do
    {:ok, s_date} = Date.from_iso8601(start_date)
    {:ok, e_date} = Date.from_iso8601(end_date)

    query
    |> where([t], fragment("?::date", t.publish_date) >= ^s_date and fragment("?::date", t.publish_date) <= ^e_date)
  end

Using the function in the REPL and after querying the db with

GoogleNews.list_google_news(viewer, %{start_date: "2021-05-04", end_date: "2021-05-06", paginate: true, page: 1})

I can see

%{
  items: [
    # items from the db
  ],
  page_number: 13,
  page_size: 10,
  paginate: true,
  total_entries: 128,
  total_pages: 13
}

after I query for more data, instead of empty list I can see the same data from the 13th page. Looking at the scrivener_ecto I can see that they handled this but for me, it’s not working. I’m sorry I know it’s confusing I’m trying to explain it as much as I can, so can anyone helps me understand why is this happening?