-
Notifications
You must be signed in to change notification settings - Fork 1
/
deck_stats.ex
31 lines (27 loc) · 908 Bytes
/
deck_stats.ex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
defmodule Memorex.DeckStats do
@moduledoc """
A struct which contains various counts for a `Memorex.Domain.Deck`.
"""
alias Memorex.Cards
alias Memorex.Ecto.Schema
@type t :: %__MODULE__{
total: non_neg_integer(),
new: non_neg_integer(),
learn: non_neg_integer(),
review: non_neg_integer(),
due: non_neg_integer(),
suspended: non_neg_integer()
}
defstruct [:total, :new, :learn, :review, :due, :suspended]
@spec new(Schema.id(), DateTime.t()) :: t()
def new(deck_id, time_now) do
%__MODULE__{
total: Cards.count(deck_id),
new: Cards.count(deck_id, card_type: :new),
learn: Cards.count(deck_id, card_type: :learn),
review: Cards.count(deck_id, card_type: :review),
due: Cards.due_count(deck_id, time_now),
suspended: Cards.count(deck_id, card_status: :suspended)
}
end
end