From 2f79eccec4f1ac5ce14854e61fcf310f082d28dc Mon Sep 17 00:00:00 2001 From: thortol Date: Tue, 20 Aug 2024 00:20:04 +0800 Subject: [PATCH 1/3] fix sorting for grading --- lib/cadet/assessments/assessments.ex | 38 ++++++++++++++-------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/lib/cadet/assessments/assessments.ex b/lib/cadet/assessments/assessments.ex index ced5441e1..d1e081792 100644 --- a/lib/cadet/assessments/assessments.ex +++ b/lib/cadet/assessments/assessments.ex @@ -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, @@ -1982,7 +1982,7 @@ 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]) submissions = Repo.all(query) count_query = @@ -2027,30 +2027,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, @@ -2060,7 +2060,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 ) @@ -2072,30 +2072,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, @@ -2105,7 +2105,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] ) From ec73e5df3cb34d3129f7aaf10f691ca29d25f679 Mon Sep 17 00:00:00 2001 From: thortol Date: Tue, 20 Aug 2024 00:57:14 +0800 Subject: [PATCH 2/3] sorted by submission.id as well for the edge case that inserted_at is the same --- lib/cadet/assessments/assessments.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/cadet/assessments/assessments.ex b/lib/cadet/assessments/assessments.ex index d1e081792..b63c0c5f3 100644 --- a/lib/cadet/assessments/assessments.ex +++ b/lib/cadet/assessments/assessments.ex @@ -1982,7 +1982,7 @@ defmodule Cadet.Assessments do query = sort_submission(query, Map.get(params, "sortBy", ""), Map.get(params, "sortDirection", "")) - query = from([s, ans, asst, cr, user, 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 = From f84156e5ce3413ef407136a43a6b17e1096963db Mon Sep 17 00:00:00 2001 From: thortol Date: Tue, 20 Aug 2024 01:00:12 +0800 Subject: [PATCH 3/3] fixed formatting issues --- lib/cadet/assessments/assessments.ex | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/cadet/assessments/assessments.ex b/lib/cadet/assessments/assessments.ex index b63c0c5f3..62b0fa729 100644 --- a/lib/cadet/assessments/assessments.ex +++ b/lib/cadet/assessments/assessments.ex @@ -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, cr, user, group] in query, order_by: [desc: s.inserted_at, asc: s.id]) + 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 =