summaryrefslogtreecommitdiff
path: root/lib/chessh/ssh/client/menus/selector.ex
blob: 225c41f45c00166419fc9ebff4ebc91e4473d425 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
defmodule Chessh.SSH.Client.Selector do
  import Ecto.Query
  alias Chessh.Repo

  def paginate_ish_query(query, current_id, direction) do
    sorted_query =
      if direction == :desc,
        do: from(g in query, order_by: [desc: g.id]),
        else: from(g in query, order_by: [asc: g.id])

    results =
      if !is_nil(current_id) do
        if direction == :desc,
          do: from(g in sorted_query, where: g.id < ^current_id),
          else: from(g in sorted_query, where: g.id > ^current_id)
      else
        sorted_query
      end
      |> Repo.all()

    if direction == :desc, do: results, else: Enum.reverse(results)
  end
end