File tree Expand file tree Collapse file tree 1 file changed +49
-0
lines changed Expand file tree Collapse file tree 1 file changed +49
-0
lines changed Original file line number Diff line number Diff line change
1
+ defmodule Mix.Tasks.Gift.Daily.Badge do
2
+ use Mix.Task
3
+
4
+ import Ecto.Query , warn: false
5
+
6
+ alias Safira.Accounts.Attendee
7
+ alias Safira.Contest
8
+ alias Safira.Contest.Redeem
9
+ alias Safira.Contest.Badge
10
+
11
+ alias Safira.Repo
12
+
13
+ # Expects a date in yyyy-mm-dd format
14
+ def run ( args ) do
15
+ Mix.Task . run ( "app.start" )
16
+
17
+ cond do
18
+ length ( args ) != 2 ->
19
+ Mix . shell ( ) . info ( "Needs to receive badge_id and the date of the day." )
20
+
21
+ true ->
22
+ args |> create ( )
23
+ end
24
+ end
25
+
26
+ def create ( args ) do
27
+
28
+ { badge_id , date } = { args |> Enum . at ( 0 ) , args |> Enum . at ( 1 ) |> Date . from_iso8601! ( ) }
29
+
30
+ Repo . all (
31
+ from a in Attendee ,
32
+ join: r in Redeem , on: a . id == r . attendee_id ,
33
+ join: b in Badge , on: r . badge_id == b . id ,
34
+ where: not ( is_nil a . user_id ) and fragment ( "?::date" , r . inserted_at ) == ^ date ,
35
+ preload: [ badges: b ]
36
+ )
37
+ |> Enum . map ( fn a -> Map . put ( a , :badge_count , length ( a . badges ) ) end )
38
+ |> Enum . filter ( fn a -> a . badge_count > 0 end )
39
+ |> Enum . each ( fn a ->
40
+ Contest . create_redeem ( % {
41
+ attendee_id: a . id ,
42
+ manager_id: 1 ,
43
+ badge_id: badge_id
44
+ } )
45
+ end )
46
+
47
+ end
48
+
49
+ end
You can’t perform that action at this time.
0 commit comments