Skip to content
16 changes: 11 additions & 5 deletions lib/cadet/assessments/assessments.ex
Original file line number Diff line number Diff line change
Expand Up @@ -1034,7 +1034,7 @@ defmodule Cadet.Assessments do

# Begin autograding job
GradingJob.force_grade_individual_submission(updated_submission)
update_xp_bonus(submission)
update_xp_bonus(updated_submission)

{:ok, nil}
else
Expand Down Expand Up @@ -1257,6 +1257,8 @@ defmodule Cadet.Assessments do
|> Submission.changeset(%{is_grading_published: true})
|> Repo.update()

update_xp_bonus(submission)

Notifications.write_notification_when_published(
submission.id,
:published_grading
Expand Down Expand Up @@ -1455,11 +1457,10 @@ defmodule Cadet.Assessments do
Answer
|> where(submission_id: ^submission_id)
|> order_by(:question_id)
|> group_by([a], a.id)
|> select([a], %{
# grouping by submission, so s.xp_bonus will be the same, but we need an
# aggregate function
total_xp: sum(a.xp) + sum(a.xp_adjustment)
total_xp: a.xp + a.xp_adjustment
})

total =
Expand All @@ -1470,15 +1471,20 @@ defmodule Cadet.Assessments do
})
|> Repo.one()

xp = decimal_to_integer(total.total_xp)

cur_time =
if submission.submitted_at == nil do
Timex.now()
else
submission.submitted_at
end

xp =
if is_integer(total.total_xp) do
total.total_xp
else
decimal_to_integer(total.total_xp)
end

xp_bonus =
if xp <= 0 do
0
Expand Down