Skip to content

Commit

Permalink
fix: pass the options to the repo calls
Browse files Browse the repository at this point in the history
  • Loading branch information
yordis committed Oct 10, 2024
1 parent e394a05 commit 64f096b
Showing 1 changed file with 9 additions and 37 deletions.
46 changes: 9 additions & 37 deletions lib/scrivener/paginater/ecto/query.ex
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,11 @@ defimpl Scrivener.Paginater, for: Ecto.Query do
page_size: page_size,
page_number: page_number,
module: repo,
caller: caller,
options: options
}) do
total_entries =
Keyword.get_lazy(options, :total_entries, fn ->
total_entries(query, repo, caller, options)
aggregate(query, repo, options)
end)

total_pages = total_pages(total_entries, page_size)
Expand All @@ -27,27 +26,21 @@ defimpl Scrivener.Paginater, for: Ecto.Query do
%Page{
page_size: page_size,
page_number: page_number,
entries: entries(query, repo, page_number, total_pages, page_size, caller, options),
entries: entries(query, repo, page_number, total_pages, page_size, options),
total_entries: total_entries,
total_pages: total_pages
}
end

defp entries(_, _, page_number, total_pages, _, _, _) when page_number > total_pages, do: []
defp entries(_query, _repo, page_number, total_pages, _page_size, _options) when page_number > total_pages, do: []

defp entries(query, repo, page_number, _, page_size, caller, options) do
defp entries(query, repo, page_number, _total_pages, page_size, options) do
offset = Keyword.get_lazy(options, :offset, fn -> page_size * (page_number - 1) end)
prefix = options[:prefix]

query
|> offset(^offset)
|> limit(^page_size)
|> all(repo, caller, prefix)
end

defp total_entries(query, repo, caller, options) do
prefix = options[:prefix]
aggregate(query, repo, caller, prefix)
|> repo.all(options)
end

defp aggregate(
Expand All @@ -62,8 +55,7 @@ defimpl Scrivener.Paginater, for: Ecto.Query do
]
} = query,
repo,
caller,
prefix
options
) do
query
|> exclude(:preload)
Expand All @@ -72,36 +64,16 @@ defimpl Scrivener.Paginater, for: Ecto.Query do
|> select([{x, source_index}], struct(x, ^[field]))
|> subquery()
|> select(count("*"))
|> one(repo, caller, prefix)
end

defp aggregate(query, repo, caller, nil) do
repo.aggregate(query, :count, caller: caller)
|> repo.one(repo, options)
end

defp aggregate(query, repo, caller, prefix) do
repo.aggregate(query, :count, caller: caller, prefix: prefix)
defp aggregate(query, repo, options) do
repo.aggregate(query, :count, options)
end

defp total_pages(0, _), do: 1

defp total_pages(total_entries, page_size) do
(total_entries / page_size) |> Float.ceil() |> round
end

defp all(query, repo, caller, nil) do
repo.all(query, caller: caller)
end

defp all(query, repo, caller, prefix) do
repo.all(query, caller: caller, prefix: prefix)
end

defp one(query, repo, caller, nil) do
repo.one(query, caller: caller)
end

defp one(query, repo, caller, prefix) do
repo.one(query, caller: caller, prefix: prefix)
end
end

0 comments on commit 64f096b

Please sign in to comment.