Skip to content

Commit 074071f

Browse files
fix: make final draw filter by minimum badge count (#535)
1 parent 6699aa9 commit 074071f

File tree

2 files changed

+19
-8
lines changed

2 files changed

+19
-8
lines changed

lib/safira/contest.ex

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -801,6 +801,20 @@ defmodule Safira.Contest do
801801
|> Repo.aggregate(:count, :id)
802802
end
803803

804+
def list_final_draw do
805+
br_query =
806+
BadgeRedeem
807+
|> group_by([br], br.attendee_id)
808+
|> having([br], count(br.id) >= 10)
809+
|> select([br, at, u], %{attendee_id: br.attendee_id, count: count(br.id)})
810+
811+
Attendee
812+
|> join(:inner, [at], br in subquery(br_query), on: br.attendee_id == at.id)
813+
|> where([at, br], not at.ineligible)
814+
|> preload(:user)
815+
|> Repo.all()
816+
end
817+
804818
@doc """
805819
Gets the count of badges for a category.
806820

lib/safira_web/controllers/download_controller.ex

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ defmodule SafiraWeb.DownloadController do
55

66
alias Safira.Accounts
77
alias Safira.Companies
8+
alias Safira.Contest
89

910
def generate_credentials(conn, %{"count" => count}) do
1011
{count_int, ""} = Integer.parse(count)
@@ -59,7 +60,7 @@ defmodule SafiraWeb.DownloadController do
5960
|> put_resp_header("content-disposition", "attachment; filename=\"final_draw.csv\"")
6061
|> send_chunked(200)
6162

62-
Accounts.list_attendees()
63+
Contest.list_final_draw()
6364
|> Stream.flat_map(&final_draw_lines/1)
6465
|> Stream.map(&CSV.dump_to_iodata(&1))
6566
|> Enum.reduce(conn, fn chunk, conn ->
@@ -169,13 +170,9 @@ defmodule SafiraWeb.DownloadController do
169170
|> to_string()
170171
end
171172

172-
defp final_draw_lines(user) do
173-
if user.attendee.entries < 10 or user.attendee.ineligible do
174-
[]
175-
else
176-
for _ <- 1..user.attendee.entries do
177-
[[user.id, user.name, user.handle]]
178-
end
173+
defp final_draw_lines(attendee) do
174+
for _ <- 1..attendee.entries do
175+
[[attendee.user.id, attendee.user.name, attendee.user.handle]]
179176
end
180177
end
181178

0 commit comments

Comments
 (0)