summaryrefslogtreecommitdiff
path: root/lib/chessh/ssh/client/menus/game_selector.ex
blob: 7792082255181ae01f07f5efdda4172c9f44199e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
defmodule Chessh.SSH.Client.GameSelector 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()
      |> Repo.preload([:light_player, :dark_player])

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