mirror of
https://github.com/philomena-dev/philomena.git
synced 2024-11-25 04:47:59 +01:00
767a2ba949
Resolves derpibooru/philomena#121 Resolves derpibooru/philomena#122
57 lines
1.5 KiB
Elixir
57 lines
1.5 KiB
Elixir
defmodule PhilomenaWeb.CommentLoader do
|
|
alias Philomena.Comments.Comment
|
|
alias Philomena.Repo
|
|
import Ecto.Query
|
|
|
|
def load_comments(conn, image) do
|
|
pref = load_direction(conn.assigns.current_user)
|
|
|
|
Comment
|
|
|> where(image_id: ^image.id)
|
|
|> order_by([{^pref, :created_at}])
|
|
|> preload([:image, :deleted_by, user: [awards: :badge]])
|
|
|> Repo.paginate(conn.assigns.comment_scrivener)
|
|
end
|
|
|
|
def find_page(conn, image, comment_id) do
|
|
user = conn.assigns.current_user
|
|
|
|
comment =
|
|
Comment
|
|
|> where(image_id: ^image.id)
|
|
|> where(id: ^comment_id)
|
|
|> Repo.one!()
|
|
|
|
offset =
|
|
Comment
|
|
|> where(image_id: ^image.id)
|
|
|> filter_direction(comment.created_at, user)
|
|
|> Repo.aggregate(:count, :id)
|
|
|
|
page_size = conn.assigns.comment_scrivener[:page_size]
|
|
|
|
# Pagination starts at page 1
|
|
div(offset, page_size) + 1
|
|
end
|
|
|
|
def last_page(conn, image) do
|
|
offset =
|
|
Comment
|
|
|> where(image_id: ^image.id)
|
|
|> Repo.aggregate(:count, :id)
|
|
|
|
page_size = conn.assigns.comment_scrivener[:page_size]
|
|
|
|
# Pagination starts at page 1
|
|
div(offset, page_size) + 1
|
|
end
|
|
|
|
defp load_direction(%{comments_newest_first: false}), do: :asc
|
|
defp load_direction(_user), do: :desc
|
|
|
|
defp filter_direction(query, time, %{comments_newest_first: false}),
|
|
do: where(query, [c], c.created_at <= ^time)
|
|
|
|
defp filter_direction(query, time, _user),
|
|
do: where(query, [c], c.created_at >= ^time)
|
|
end
|