Skip to content

Commit f4a07fc

Browse files
kevin9foonglizchowangelsl
authored
Add contest voting
Co-authored-by: [email protected] <[email protected]> Co-authored-by: Elizabeth Chow <[email protected]> Co-authored-by: angelsl <[email protected]>
1 parent 55f58d4 commit f4a07fc

33 files changed

+2327
-125
lines changed

.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -111,3 +111,6 @@ erl_crash.dump
111111
.elixir_ls/
112112

113113
.env
114+
115+
# Generated lexer
116+
/src/source_lexer.erl

config/config.exs

+5-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,11 @@ config :cadet, Cadet.Jobs.Scheduler,
1919
overlap: false,
2020
jobs: [
2121
# Grade assessments that close in the previous day at 00:01
22-
{"1 0 * * *", {Cadet.Autograder.GradingJob, :grade_all_due_yesterday, []}}
22+
{"1 0 * * *", {Cadet.Autograder.GradingJob, :grade_all_due_yesterday, []}},
23+
# Compute contest leaderboard that close in the previous day at 00:01
24+
{"1 0 * * *", {Cadet.Assessments, :update_final_contest_leaderboards, []}},
25+
# Compute rolling leaderboard every 2 hours
26+
{"0 */2 * * *", {Cadet.Assessments, :update_rolling_contest_leaderboards, []}}
2327
]
2428

2529
# Configures the endpoint

coveralls.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
"lib/cadet/repo.ex",
99
"lib/mix/tasks",
1010
"test/support",
11-
"test/factories"
11+
"test/factories",
12+
"src/source_lexer.erl"
1213
]
1314
}

lib/cadet/assessments/answer.ex

+13-2
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,13 @@ defmodule Cadet.Assessments.Answer do
88
alias Cadet.Repo
99
alias Cadet.Accounts.User
1010
alias Cadet.Assessments.Answer.AutogradingStatus
11-
alias Cadet.Assessments.AnswerTypes.{MCQAnswer, ProgrammingAnswer}
11+
alias Cadet.Assessments.AnswerTypes.{MCQAnswer, ProgrammingAnswer, VotingAnswer}
1212
alias Cadet.Assessments.{Question, QuestionType, Submission}
1313

1414
schema "answers" do
1515
field(:grade, :integer, default: 0)
16+
# used to compare answers with others
17+
field(:relative_score, :float, default: 0.0)
1618
field(:adjustment, :integer, default: 0)
1719
field(:xp, :integer, default: 0)
1820
field(:xp_adjustment, :integer, default: 0)
@@ -117,7 +119,16 @@ defmodule Cadet.Assessments.Answer do
117119
defp validate_answer_content(changeset) do
118120
validate_arbitrary_embedded_struct_by_type(changeset, :answer, %{
119121
mcq: MCQAnswer,
120-
programming: ProgrammingAnswer
122+
programming: ProgrammingAnswer,
123+
voting: VotingAnswer
121124
})
122125
end
126+
127+
@doc """
128+
Used to update relative_score of answer to contest_score
129+
"""
130+
def contest_score_update_changeset(answer, contest_score_param) do
131+
answer
132+
|> cast(contest_score_param, [:relative_score])
133+
end
123134
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
defmodule Cadet.Assessments.AnswerTypes.VotingAnswer do
2+
@moduledoc """
3+
The VotingQuestion entity represents a Voting question.
4+
"""
5+
use Cadet, :model
6+
7+
@primary_key false
8+
embedded_schema do
9+
field(:completed, :boolean)
10+
end
11+
12+
@required_fields ~w(completed)a
13+
14+
def changeset(answer, params \\ %{}) do
15+
answer
16+
|> cast(params, @required_fields)
17+
|> validate_required(@required_fields)
18+
end
19+
end

0 commit comments

Comments
 (0)