Skip to content

Commit 1ba82a3

Browse files
committed
Fix credo
1 parent 3a653b4 commit 1ba82a3

1 file changed

Lines changed: 48 additions & 37 deletions

File tree

  • services/app/apps/codebattle/lib/codebattle/tournament

services/app/apps/codebattle/lib/codebattle/tournament/ranking.ex

Lines changed: 48 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -43,45 +43,14 @@ defmodule Codebattle.Tournament.Ranking do
4343
def get_page(tournament, page, page_size \\ 10)
4444

4545
def get_page(%{ranking_table: nil} = tournament, page, page_size) do
46-
if tournament.ranking_type == "by_user" do
47-
players =
46+
case tournament.ranking_type do
47+
"by_user" ->
4848
tournament
49-
|> Helpers.get_players()
50-
|> Enum.reject(& &1.is_bot)
51-
|> Enum.sort_by(fn player ->
52-
cond do
53-
is_integer(player.place) and player.place > 0 -> {0, player.place}
54-
is_integer(player.wr_joined_at) -> {1, player.wr_joined_at}
55-
true -> {2, player.id}
56-
end
57-
end)
58-
59-
entries =
60-
players
61-
|> Enum.with_index(1)
62-
|> Enum.map(fn {player, place} ->
63-
%{
64-
id: player.id,
65-
place: place,
66-
score: player.score || 0,
67-
lang: player.lang,
68-
name: player.name,
69-
clan_id: player.clan_id,
70-
clan: player.clan
71-
}
72-
end)
73-
74-
total_entries = length(entries)
75-
start_index = (page - 1) * page_size
49+
|> build_user_entries()
50+
|> paginate(page, page_size)
7651

77-
%{
78-
total_entries: total_entries,
79-
page_number: page,
80-
page_size: page_size,
81-
entries: Enum.slice(entries, start_index, page_size)
82-
}
83-
else
84-
%{total_entries: 0, page_number: page, page_size: page_size, entries: []}
52+
_ ->
53+
empty_page(page, page_size)
8554
end
8655
end
8756

@@ -123,4 +92,46 @@ defmodule Codebattle.Tournament.Ranking do
12392

12493
defp get_module(%{ranking_type: "by_clan"}), do: ByClan
12594
defp get_module(%{ranking_type: "by_user"}), do: ByUser
95+
96+
defp build_user_entries(tournament) do
97+
tournament
98+
|> Helpers.get_players()
99+
|> Enum.reject(& &1.is_bot)
100+
|> Enum.sort_by(&player_sort_key/1)
101+
|> Enum.with_index(1)
102+
|> Enum.map(fn {player, place} ->
103+
%{
104+
id: player.id,
105+
place: place,
106+
score: player.score || 0,
107+
lang: player.lang,
108+
name: player.name,
109+
clan_id: player.clan_id,
110+
clan: player.clan
111+
}
112+
end)
113+
end
114+
115+
defp player_sort_key(player) do
116+
cond do
117+
is_integer(player.place) and player.place > 0 -> {0, player.place}
118+
is_integer(player.wr_joined_at) -> {1, player.wr_joined_at}
119+
true -> {2, player.id}
120+
end
121+
end
122+
123+
defp paginate(entries, page, page_size) do
124+
start_index = (page - 1) * page_size
125+
126+
%{
127+
total_entries: length(entries),
128+
page_number: page,
129+
page_size: page_size,
130+
entries: Enum.slice(entries, start_index, page_size)
131+
}
132+
end
133+
134+
defp empty_page(page, page_size) do
135+
%{total_entries: 0, page_number: page, page_size: page_size, entries: []}
136+
end
126137
end

0 commit comments

Comments
 (0)