summaryrefslogtreecommitdiff
path: root/lib/chessh/ssh/client/menus/game_selector.ex
diff options
context:
space:
mode:
Diffstat (limited to 'lib/chessh/ssh/client/menus/game_selector.ex')
-rw-r--r--lib/chessh/ssh/client/menus/game_selector.ex24
1 files changed, 24 insertions, 0 deletions
diff --git a/lib/chessh/ssh/client/menus/game_selector.ex b/lib/chessh/ssh/client/menus/game_selector.ex
new file mode 100644
index 0000000..7792082
--- /dev/null
+++ b/lib/chessh/ssh/client/menus/game_selector.ex
@@ -0,0 +1,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