Skip to content

Commit

Permalink
fix sorting for grading (#1155)
Browse files Browse the repository at this point in the history
* fix sorting for grading

* sorted by submission.id as well for the edge case that inserted_at is the same

* fixed formatting issues
  • Loading branch information
thortol committed Aug 20, 2024
1 parent ddd4378 commit e6a9618
Showing 1 changed file with 21 additions and 19 deletions.
40 changes: 21 additions & 19 deletions lib/cadet/assessments/assessments.ex
Original file line number Diff line number Diff line change
Expand Up @@ -1943,12 +1943,12 @@ defmodule Cadet.Assessments do
left_join: asst in subquery(question_answers_query),
on: asst.assessment_id == s.assessment_id,
as: :asst,
left_join: user in User,
on: user.id == s.student_id,
as: :user,
left_join: cr in CourseRegistration,
on: user.id == cr.user_id,
on: s.student_id == cr.id,
as: :cr,
left_join: user in User,
on: user.id == cr.user_id,
as: :user,
left_join: group in Group,
on: cr.group_id == group.id,
as: :group,
Expand Down Expand Up @@ -1982,7 +1982,9 @@ defmodule Cadet.Assessments do
query =
sort_submission(query, Map.get(params, "sortBy", ""), Map.get(params, "sortDirection", ""))

query = from([s, ans, asst, user, cr, group] in query, order_by: [desc: s.inserted_at])
query =
from([s, ans, asst, cr, user, group] in query, order_by: [desc: s.inserted_at, asc: s.id])

submissions = Repo.all(query)

count_query =
Expand Down Expand Up @@ -2027,30 +2029,30 @@ defmodule Cadet.Assessments do
defp sort_submission_asc(query, sort_by) do
cond do
sort_by == "assessmentName" ->
from([s, ans, asst, user, cr, group, config] in query,
from([s, ans, asst, cr, user, group, config] in query,
order_by: fragment("upper(?)", asst.title)
)

sort_by == "assessmentType" ->
from([s, ans, asst, user, cr, group, config] in query, order_by: asst.config_id)
from([s, ans, asst, cr, user, group, config] in query, order_by: asst.config_id)

sort_by == "studentName" ->
from([s, ans, asst, user, cr, group, config] in query,
from([s, ans, asst, cr, user, group, config] in query,
order_by: fragment("upper(?)", user.name)
)

sort_by == "studentUsername" ->
from([s, ans, asst, user, cr, group, config] in query,
from([s, ans, asst, cr, user, group, config] in query,
order_by: fragment("upper(?)", user.username)
)

sort_by == "groupName" ->
from([s, ans, asst, user, cr, group, config] in query,
from([s, ans, asst, cr, user, group, config] in query,
order_by: fragment("upper(?)", group.name)
)

sort_by == "progressStatus" ->
from([s, ans, asst, user, cr, group, config] in query,
from([s, ans, asst, cr, user, group, config] in query,
order_by: [
asc: config.is_manually_graded,
asc: s.status,
Expand All @@ -2060,7 +2062,7 @@ defmodule Cadet.Assessments do
)

sort_by == "xp" ->
from([s, ans, asst, user, cr, group, config] in query,
from([s, ans, asst, cr, user, group, config] in query,
order_by: ans.xp + ans.xp_adjustment
)

Expand All @@ -2072,30 +2074,30 @@ defmodule Cadet.Assessments do
defp sort_submission_desc(query, sort_by) do
cond do
sort_by == "assessmentName" ->
from([s, ans, asst, user, cr, group, config] in query,
from([s, ans, asst, cr, user, group, config] in query,
order_by: [desc: fragment("upper(?)", asst.title)]
)

sort_by == "assessmentType" ->
from([s, ans, asst, user, cr, group, config] in query, order_by: [desc: asst.config_id])
from([s, ans, asst, cr, user, group, config] in query, order_by: [desc: asst.config_id])

sort_by == "studentName" ->
from([s, ans, asst, user, cr, group, config] in query,
from([s, ans, asst, cr, user, group, config] in query,
order_by: [desc: fragment("upper(?)", user.name)]
)

sort_by == "studentUsername" ->
from([s, ans, asst, user, cr, group, config] in query,
from([s, ans, asst, cr, user, group, config] in query,
order_by: [desc: fragment("upper(?)", user.username)]
)

sort_by == "groupName" ->
from([s, ans, asst, user, cr, group, config] in query,
from([s, ans, asst, cr, user, group, config] in query,
order_by: [desc: fragment("upper(?)", group.name)]
)

sort_by == "progressStatus" ->
from([s, ans, asst, user, cr, group, config] in query,
from([s, ans, asst, cr, user, group, config] in query,
order_by: [
desc: config.is_manually_graded,
desc: s.status,
Expand All @@ -2105,7 +2107,7 @@ defmodule Cadet.Assessments do
)

sort_by == "xp" ->
from([s, ans, asst, user, cr, group, config] in query,
from([s, ans, asst, cr, user, group, config] in query,
order_by: [desc: ans.xp + ans.xp_adjustment]
)

Expand Down

0 comments on commit e6a9618

Please sign in to comment.