From f6efd14f5f8574dcbca02d6e7d95a2e025002816 Mon Sep 17 00:00:00 2001 From: thortol Date: Mon, 8 Apr 2024 11:41:50 +0800 Subject: [PATCH 01/19] handled backend sorting --- lib/cadet/assessments/assessments.ex | 72 ++++++++++++++++++++++++++-- 1 file changed, 69 insertions(+), 3 deletions(-) diff --git a/lib/cadet/assessments/assessments.ex b/lib/cadet/assessments/assessments.ex index ca5595e51..e185cb004 100644 --- a/lib/cadet/assessments/assessments.ex +++ b/lib/cadet/assessments/assessments.ex @@ -1483,7 +1483,9 @@ defmodule Cadet.Assessments do "group" => "false", "notFullyGraded" => "true", "pageSize" => "10", - "offset" => "0" + "offset" => "0", + "sortBy" => "", + "sortDirection" => "" } ) do submission_answers_query = @@ -1504,7 +1506,9 @@ defmodule Cadet.Assessments do on: q.assessment_id == a.id, select: %{ assessment_id: q.assessment_id, - question_count: count(q.id) + question_count: count(q.id), + title: max(a.title), + config_id: max(a.config_id) } ) @@ -1516,6 +1520,9 @@ defmodule Cadet.Assessments do left_join: asst in subquery(question_answers_query), on: asst.assessment_id == s.assessment_id, as: :asst, + inner_join: user in User, + on: user.id == s.student_id, + as: :user, where: ^build_user_filter(params), where: s.assessment_id in subquery(build_assessment_filter(params, course_id)), where: s.assessment_id in subquery(build_assessment_config_filter(params)), @@ -1539,7 +1546,7 @@ defmodule Cadet.Assessments do question_count: asst.question_count } ) - + query = sort_submission(query, Map.get(params, "sortBy", ""), Map.get(params, "sortDirection", "")) submissions = Repo.all(query) count_query = @@ -1563,6 +1570,65 @@ defmodule Cadet.Assessments do {:ok, %{count: count, data: generate_grading_summary_view_model(submissions, course_id)}} end + # Given a query from submissions_by_grader_for_index, + # sorts it by the relevant field and direction + # sort_by is a string of either "", "assessmentName", "assessmentType", "studentName", + # "studentUsername", "groupName", "submissionStatus", "gradingStatus", "xp" + # sort_direction is a string of either "", "sort-asc", "sort-desc" + defp sort_submission(query, sort_by, sort_direction) do + if sort_direction == "sort-asc" do + cond do + sort_by == "" -> + query + sort_by == "assessmentName" -> + from [s, ans, asst, user] in query, order_by: asst.title + sort_by == "assessmentType" -> + from [s, ans, asst, user] in query, order_by: asst.config_id + sort_by == "studentName" -> + from [s, ans, asst, user] in query, order_by: user.name + sort_by == "studentUsername" -> + from [s, ans, asst, user] in query, order_by: user.username + sort_by == "groupName" -> + from [s, ans, asst, user] in query, order_by: s.team_id + sort_by == "submissionStatus" -> + from [s, ans, asst, user] in query, order_by: s.status + sort_by == "gradingStatus" -> + from [s, ans, asst, user] in query, order_by: asst.question_count - ans.graded_count + sort_by == "xp" -> + from [s, ans, asst, user] in query, order_by: ans.xp + true -> + query + end + else + if sort_direction == "sort-desc" do + cond do + sort_by == "" -> + query + sort_by == "assessmentName" -> + from [s, ans, asst, user] in query, order_by: [desc: asst.title] + sort_by == "assessmentType" -> + from [s, ans, asst, user] in query, order_by: [desc: asst.config_id] + sort_by == "studentName" -> + from [s, ans, asst, user] in query, order_by: [desc: user.name] + sort_by == "studentUsername" -> + from [s, ans, asst, user] in query, order_by: [desc: user.username] + sort_by == "groupName" -> + from [s, ans, asst, user] in query, order_by: [desc: s.team_id] + sort_by == "submissionStatus" -> + from [s, ans, asst, user] in query, order_by: [desc: s.status] + sort_by == "gradingStatus" -> + from [s, ans, asst, user] in query, order_by: [desc: asst.question_count - ans.graded_count] + sort_by == "xp" -> + from [s, ans, asst, user] in query, order_by: [desc: ans.xp] + true -> + query + end + else + query + end + end + end + defp build_assessment_filter(params, course_id) do assessments_filters = Enum.reduce(params, dynamic(true), fn From 7ba86813f4a1a1ff1fc68242f58374626782c11a Mon Sep 17 00:00:00 2001 From: thortol Date: Mon, 8 Apr 2024 14:49:46 +0800 Subject: [PATCH 02/19] fixed sorting by inserted_at --- lib/cadet/assessments/assessments.ex | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/cadet/assessments/assessments.ex b/lib/cadet/assessments/assessments.ex index e185cb004..a0e617e47 100644 --- a/lib/cadet/assessments/assessments.ex +++ b/lib/cadet/assessments/assessments.ex @@ -1528,7 +1528,6 @@ defmodule Cadet.Assessments do where: s.assessment_id in subquery(build_assessment_config_filter(params)), where: ^build_submission_filter(params), where: ^build_course_registration_filter(params, grader), - order_by: [desc: s.inserted_at], limit: ^elem(Integer.parse(Map.get(params, "pageSize", "10")), 0), offset: ^elem(Integer.parse(Map.get(params, "offset", "0")), 0), select: %{ @@ -1547,6 +1546,7 @@ defmodule Cadet.Assessments do } ) query = sort_submission(query, Map.get(params, "sortBy", ""), Map.get(params, "sortDirection", "")) + query = from [s, ans, asst, user] in query, order_by: [desc: s.inserted_at] submissions = Repo.all(query) count_query = @@ -1569,7 +1569,10 @@ defmodule Cadet.Assessments do {:ok, %{count: count, data: generate_grading_summary_view_model(submissions, course_id)}} end - + defp print_sql(queryable) do + IO.inspect(Ecto.Adapters.SQL.to_sql(:all, Repo, queryable)) + queryable + end # Given a query from submissions_by_grader_for_index, # sorts it by the relevant field and direction # sort_by is a string of either "", "assessmentName", "assessmentType", "studentName", From 5e9d58247b909c649897f819bd041c0b732f41e5 Mon Sep 17 00:00:00 2001 From: thortol Date: Mon, 8 Apr 2024 15:43:41 +0800 Subject: [PATCH 03/19] removed unused code --- lib/cadet/assessments/assessments.ex | 4 ---- 1 file changed, 4 deletions(-) diff --git a/lib/cadet/assessments/assessments.ex b/lib/cadet/assessments/assessments.ex index a0e617e47..413f1bce7 100644 --- a/lib/cadet/assessments/assessments.ex +++ b/lib/cadet/assessments/assessments.ex @@ -1569,10 +1569,6 @@ defmodule Cadet.Assessments do {:ok, %{count: count, data: generate_grading_summary_view_model(submissions, course_id)}} end - defp print_sql(queryable) do - IO.inspect(Ecto.Adapters.SQL.to_sql(:all, Repo, queryable)) - queryable - end # Given a query from submissions_by_grader_for_index, # sorts it by the relevant field and direction # sort_by is a string of either "", "assessmentName", "assessmentType", "studentName", From d258d80e588c002b891d18219c1aab8db16eb7e7 Mon Sep 17 00:00:00 2001 From: thortol Date: Mon, 8 Apr 2024 15:51:00 +0800 Subject: [PATCH 04/19] changed inner_join to left_join --- 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 413f1bce7..1c5d76e2f 100644 --- a/lib/cadet/assessments/assessments.ex +++ b/lib/cadet/assessments/assessments.ex @@ -1520,7 +1520,7 @@ defmodule Cadet.Assessments do left_join: asst in subquery(question_answers_query), on: asst.assessment_id == s.assessment_id, as: :asst, - inner_join: user in User, + left_join: user in User, on: user.id == s.student_id, as: :user, where: ^build_user_filter(params), From 91c9713e40a9aff8049ef4e7e3ae3cd0a799e8b8 Mon Sep 17 00:00:00 2001 From: thortol Date: Mon, 8 Apr 2024 17:21:51 +0800 Subject: [PATCH 05/19] added new tests --- test/cadet/assessments/assessments_test.exs | 67 +++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/test/cadet/assessments/assessments_test.exs b/test/cadet/assessments/assessments_test.exs index 6b1793d0b..88b17b988 100644 --- a/test/cadet/assessments/assessments_test.exs +++ b/test/cadet/assessments/assessments_test.exs @@ -2516,6 +2516,73 @@ defmodule Cadet.AssessmentsTest do assert Enum.find(assessments_from_res, fn a -> a.id == s.assessment_id end) != nil end) end + + test "sorting by assessment title ascending", %{ + course_regs: %{avenger1_cr: avenger}, + assessments: assessments, + total_submissions: total_submissions + } do + + {_, res} = + Assessments.submissions_by_grader_for_index(avenger, %{ + "pageSize" => total_submissions, + "sortBy" => "assessmentName", + "sortDirection" => "sort-asc" + }) + + submissions_from_res = res[:data][:submissions] + assessments_from_res = res[:data][:assessments] + + submissions_by_title = Enum.map( + submissions_from_res, + fn s -> + Enum.find(assessments_from_res, fn a -> + s.assessment_id == a.id + end) + end + ) + + Enum.reduce(submissions_by_title, + fn x, y -> + assert x.title >= y.title + y + end + ) + end + + test "sorting by assessment title descending", %{ + course_regs: %{avenger1_cr: avenger}, + assessments: assessments, + total_submissions: total_submissions + } do + assessment = assessments["mission"][:assessment] + + {_, res} = + Assessments.submissions_by_grader_for_index(avenger, %{ + "pageSize" => total_submissions, + "sortBy" => "assessmentName", + "sortDirection" => "sort-desc" + }) + + submissions_from_res = res[:data][:submissions] + assessments_from_res = res[:data][:assessments] + + submissions_by_title = Enum.map( + submissions_from_res, + fn s -> + Enum.find(assessments_from_res, fn a -> + s.assessment_id == a.id + end) + end + ) + + Enum.reduce(submissions_by_title, + fn x, y -> + assert x.title <= y.title + y + end + ) + end end defp get_answer_relative_scores(answers) do From 702092bad82d1721496679b23c3e7d2fa54e3e82 Mon Sep 17 00:00:00 2001 From: thortol Date: Mon, 8 Apr 2024 17:37:25 +0800 Subject: [PATCH 06/19] fixed formatting --- lib/cadet/assessments/assessments.ex | 84 +++++++++++++-------- test/cadet/assessments/assessments_test.exs | 41 +++++----- 2 files changed, 76 insertions(+), 49 deletions(-) diff --git a/lib/cadet/assessments/assessments.ex b/lib/cadet/assessments/assessments.ex index 1c5d76e2f..e9924af8f 100644 --- a/lib/cadet/assessments/assessments.ex +++ b/lib/cadet/assessments/assessments.ex @@ -1545,8 +1545,11 @@ defmodule Cadet.Assessments do question_count: asst.question_count } ) - query = sort_submission(query, Map.get(params, "sortBy", ""), Map.get(params, "sortDirection", "")) - query = from [s, ans, asst, user] in query, order_by: [desc: s.inserted_at] + + query = + sort_submission(query, Map.get(params, "sortBy", ""), Map.get(params, "sortDirection", "")) + + query = from([s, ans, asst, user] in query, order_by: [desc: s.inserted_at]) submissions = Repo.all(query) count_query = @@ -1569,6 +1572,7 @@ defmodule Cadet.Assessments do {:ok, %{count: count, data: generate_grading_summary_view_model(submissions, course_id)}} end + # Given a query from submissions_by_grader_for_index, # sorts it by the relevant field and direction # sort_by is a string of either "", "assessmentName", "assessmentType", "studentName", @@ -1577,48 +1581,68 @@ defmodule Cadet.Assessments do defp sort_submission(query, sort_by, sort_direction) do if sort_direction == "sort-asc" do cond do - sort_by == "" -> - query - sort_by == "assessmentName" -> - from [s, ans, asst, user] in query, order_by: asst.title - sort_by == "assessmentType" -> - from [s, ans, asst, user] in query, order_by: asst.config_id - sort_by == "studentName" -> - from [s, ans, asst, user] in query, order_by: user.name - sort_by == "studentUsername" -> - from [s, ans, asst, user] in query, order_by: user.username - sort_by == "groupName" -> - from [s, ans, asst, user] in query, order_by: s.team_id - sort_by == "submissionStatus" -> - from [s, ans, asst, user] in query, order_by: s.status - sort_by == "gradingStatus" -> - from [s, ans, asst, user] in query, order_by: asst.question_count - ans.graded_count - sort_by == "xp" -> - from [s, ans, asst, user] in query, order_by: ans.xp - true -> - query + sort_by == "" -> + query + + sort_by == "assessmentName" -> + from([s, ans, asst, user] in query, order_by: asst.title) + + sort_by == "assessmentType" -> + from([s, ans, asst, user] in query, order_by: asst.config_id) + + sort_by == "studentName" -> + from([s, ans, asst, user] in query, order_by: user.name) + + sort_by == "studentUsername" -> + from([s, ans, asst, user] in query, order_by: user.username) + + sort_by == "groupName" -> + from([s, ans, asst, user] in query, order_by: s.team_id) + + sort_by == "submissionStatus" -> + from([s, ans, asst, user] in query, order_by: s.status) + + sort_by == "gradingStatus" -> + from([s, ans, asst, user] in query, order_by: asst.question_count - ans.graded_count) + + sort_by == "xp" -> + from([s, ans, asst, user] in query, order_by: ans.xp) + + true -> + query end else if sort_direction == "sort-desc" do cond do sort_by == "" -> query + sort_by == "assessmentName" -> - from [s, ans, asst, user] in query, order_by: [desc: asst.title] + from([s, ans, asst, user] in query, order_by: [desc: asst.title]) + sort_by == "assessmentType" -> - from [s, ans, asst, user] in query, order_by: [desc: asst.config_id] + from([s, ans, asst, user] in query, order_by: [desc: asst.config_id]) + sort_by == "studentName" -> - from [s, ans, asst, user] in query, order_by: [desc: user.name] + from([s, ans, asst, user] in query, order_by: [desc: user.name]) + sort_by == "studentUsername" -> - from [s, ans, asst, user] in query, order_by: [desc: user.username] + from([s, ans, asst, user] in query, order_by: [desc: user.username]) + sort_by == "groupName" -> - from [s, ans, asst, user] in query, order_by: [desc: s.team_id] + from([s, ans, asst, user] in query, order_by: [desc: s.team_id]) + sort_by == "submissionStatus" -> - from [s, ans, asst, user] in query, order_by: [desc: s.status] + from([s, ans, asst, user] in query, order_by: [desc: s.status]) + sort_by == "gradingStatus" -> - from [s, ans, asst, user] in query, order_by: [desc: asst.question_count - ans.graded_count] + from([s, ans, asst, user] in query, + order_by: [desc: asst.question_count - ans.graded_count] + ) + sort_by == "xp" -> - from [s, ans, asst, user] in query, order_by: [desc: ans.xp] + from([s, ans, asst, user] in query, order_by: [desc: ans.xp]) + true -> query end diff --git a/test/cadet/assessments/assessments_test.exs b/test/cadet/assessments/assessments_test.exs index 88b17b988..6166302a6 100644 --- a/test/cadet/assessments/assessments_test.exs +++ b/test/cadet/assessments/assessments_test.exs @@ -2522,7 +2522,6 @@ defmodule Cadet.AssessmentsTest do assessments: assessments, total_submissions: total_submissions } do - {_, res} = Assessments.submissions_by_grader_for_index(avenger, %{ "pageSize" => total_submissions, @@ -2533,16 +2532,18 @@ defmodule Cadet.AssessmentsTest do submissions_from_res = res[:data][:submissions] assessments_from_res = res[:data][:assessments] - submissions_by_title = Enum.map( - submissions_from_res, - fn s -> - Enum.find(assessments_from_res, fn a -> - s.assessment_id == a.id - end) - end - ) + submissions_by_title = + Enum.map( + submissions_from_res, + fn s -> + Enum.find(assessments_from_res, fn a -> + s.assessment_id == a.id + end) + end + ) - Enum.reduce(submissions_by_title, + Enum.reduce( + submissions_by_title, fn x, y -> assert x.title >= y.title y @@ -2564,10 +2565,11 @@ defmodule Cadet.AssessmentsTest do "sortDirection" => "sort-desc" }) - submissions_from_res = res[:data][:submissions] - assessments_from_res = res[:data][:assessments] + submissions_from_res = res[:data][:submissions] + assessments_from_res = res[:data][:assessments] - submissions_by_title = Enum.map( + submissions_by_title = + Enum.map( submissions_from_res, fn s -> Enum.find(assessments_from_res, fn a -> @@ -2576,12 +2578,13 @@ defmodule Cadet.AssessmentsTest do end ) - Enum.reduce(submissions_by_title, - fn x, y -> - assert x.title <= y.title - y - end - ) + Enum.reduce( + submissions_by_title, + fn x, y -> + assert x.title <= y.title + y + end + ) end end From fb70883c9d28408b30c09c4d53535ec9bbbb9868 Mon Sep 17 00:00:00 2001 From: thortol Date: Mon, 8 Apr 2024 17:52:33 +0800 Subject: [PATCH 07/19] reformatted code --- lib/cadet/assessments/assessments.ex | 102 ++++++++++++++------------- 1 file changed, 52 insertions(+), 50 deletions(-) diff --git a/lib/cadet/assessments/assessments.ex b/lib/cadet/assessments/assessments.ex index e9924af8f..eb15f0bc6 100644 --- a/lib/cadet/assessments/assessments.ex +++ b/lib/cadet/assessments/assessments.ex @@ -1580,75 +1580,77 @@ defmodule Cadet.Assessments do # sort_direction is a string of either "", "sort-asc", "sort-desc" defp sort_submission(query, sort_by, sort_direction) do if sort_direction == "sort-asc" do - cond do - sort_by == "" -> - query + sort_submission_asc(query, sort_by) + else + if sort_direction == "sort-desc" do + sort_submission_desc(query, sort_by) + else + query + end + end + end - sort_by == "assessmentName" -> - from([s, ans, asst, user] in query, order_by: asst.title) + defp sort_submission_asc(query, sort_by) do + cond do + sort_by == "assessmentName" -> + from([s, ans, asst, user] in query, order_by: asst.title) - sort_by == "assessmentType" -> - from([s, ans, asst, user] in query, order_by: asst.config_id) + sort_by == "assessmentType" -> + from([s, ans, asst, user] in query, order_by: asst.config_id) - sort_by == "studentName" -> - from([s, ans, asst, user] in query, order_by: user.name) + sort_by == "studentName" -> + from([s, ans, asst, user] in query, order_by: user.name) - sort_by == "studentUsername" -> - from([s, ans, asst, user] in query, order_by: user.username) + sort_by == "studentUsername" -> + from([s, ans, asst, user] in query, order_by: user.username) - sort_by == "groupName" -> - from([s, ans, asst, user] in query, order_by: s.team_id) + sort_by == "groupName" -> + from([s, ans, asst, user] in query, order_by: s.team_id) - sort_by == "submissionStatus" -> - from([s, ans, asst, user] in query, order_by: s.status) + sort_by == "submissionStatus" -> + from([s, ans, asst, user] in query, order_by: s.status) - sort_by == "gradingStatus" -> - from([s, ans, asst, user] in query, order_by: asst.question_count - ans.graded_count) + sort_by == "gradingStatus" -> + from([s, ans, asst, user] in query, order_by: asst.question_count - ans.graded_count) - sort_by == "xp" -> - from([s, ans, asst, user] in query, order_by: ans.xp) + sort_by == "xp" -> + from([s, ans, asst, user] in query, order_by: ans.xp) - true -> - query - end - else - if sort_direction == "sort-desc" do - cond do - sort_by == "" -> - query + true -> + query + end + end - sort_by == "assessmentName" -> - from([s, ans, asst, user] in query, order_by: [desc: asst.title]) + defp sort_submission_desc(query, sort_by) do + cond do + sort_by == "assessmentName" -> + from([s, ans, asst, user] in query, order_by: [desc: asst.title]) - sort_by == "assessmentType" -> - from([s, ans, asst, user] in query, order_by: [desc: asst.config_id]) + sort_by == "assessmentType" -> + from([s, ans, asst, user] in query, order_by: [desc: asst.config_id]) - sort_by == "studentName" -> - from([s, ans, asst, user] in query, order_by: [desc: user.name]) + sort_by == "studentName" -> + from([s, ans, asst, user] in query, order_by: [desc: user.name]) - sort_by == "studentUsername" -> - from([s, ans, asst, user] in query, order_by: [desc: user.username]) + sort_by == "studentUsername" -> + from([s, ans, asst, user] in query, order_by: [desc: user.username]) - sort_by == "groupName" -> - from([s, ans, asst, user] in query, order_by: [desc: s.team_id]) + sort_by == "groupName" -> + from([s, ans, asst, user] in query, order_by: [desc: s.team_id]) - sort_by == "submissionStatus" -> - from([s, ans, asst, user] in query, order_by: [desc: s.status]) + sort_by == "submissionStatus" -> + from([s, ans, asst, user] in query, order_by: [desc: s.status]) - sort_by == "gradingStatus" -> - from([s, ans, asst, user] in query, - order_by: [desc: asst.question_count - ans.graded_count] - ) + sort_by == "gradingStatus" -> + from([s, ans, asst, user] in query, + order_by: [desc: asst.question_count - ans.graded_count] + ) - sort_by == "xp" -> - from([s, ans, asst, user] in query, order_by: [desc: ans.xp]) + sort_by == "xp" -> + from([s, ans, asst, user] in query, order_by: [desc: ans.xp]) - true -> - query - end - else + true -> query - end end end From 6dc40de20aa01bc7f20afc5502ab4df655479113 Mon Sep 17 00:00:00 2001 From: thortol Date: Mon, 8 Apr 2024 21:53:20 +0800 Subject: [PATCH 08/19] added more test --- test/cadet/assessments/assessments_test.exs | 74 +++++++++++++++++++-- 1 file changed, 70 insertions(+), 4 deletions(-) diff --git a/test/cadet/assessments/assessments_test.exs b/test/cadet/assessments/assessments_test.exs index 6166302a6..1d8917db6 100644 --- a/test/cadet/assessments/assessments_test.exs +++ b/test/cadet/assessments/assessments_test.exs @@ -2519,7 +2519,7 @@ defmodule Cadet.AssessmentsTest do test "sorting by assessment title ascending", %{ course_regs: %{avenger1_cr: avenger}, - assessments: assessments, + assessments: _assessments, total_submissions: total_submissions } do {_, res} = @@ -2553,11 +2553,9 @@ defmodule Cadet.AssessmentsTest do test "sorting by assessment title descending", %{ course_regs: %{avenger1_cr: avenger}, - assessments: assessments, + assessments: _assessments, total_submissions: total_submissions } do - assessment = assessments["mission"][:assessment] - {_, res} = Assessments.submissions_by_grader_for_index(avenger, %{ "pageSize" => total_submissions, @@ -2586,6 +2584,74 @@ defmodule Cadet.AssessmentsTest do end ) end + + test "sorting by assessment type ascending", %{ + course_regs: %{avenger1_cr: avenger}, + assessments: _assessments, + total_submissions: total_submissions + } do + {_, res} = + Assessments.submissions_by_grader_for_index(avenger, %{ + "pageSize" => total_submissions, + "sortBy" => "assessmentType", + "sortDirection" => "sort-asc" + }) + + submissions_from_res = res[:data][:submissions] + assessments_from_res = res[:data][:assessments] + + submissions_by_assessments_type = + Enum.map( + submissions_from_res, + fn s -> + Enum.find(assessments_from_res, fn a -> + s.assessment_id == a.id + end) + end + ) + + Enum.reduce( + submissions_by_assessments_type, + fn x, y -> + assert x.config_id >= y.config_id + y + end + ) + end + + test "sorting by assessment type descending", %{ + course_regs: %{avenger1_cr: avenger}, + assessments: _assessments, + total_submissions: total_submissions + } do + {_, res} = + Assessments.submissions_by_grader_for_index(avenger, %{ + "pageSize" => total_submissions, + "sortBy" => "assessmentType", + "sortDirection" => "sort-desc" + }) + + submissions_from_res = res[:data][:submissions] + assessments_from_res = res[:data][:assessments] + + submissions_by_assessments_type = + Enum.map( + submissions_from_res, + fn s -> + Enum.find(assessments_from_res, fn a -> + s.assessment_id == a.id + end) + end + ) + + Enum.reduce( + submissions_by_assessments_type, + fn x, y -> + assert x.config_id <= y.config_id + y + end + ) + end end defp get_answer_relative_scores(answers) do From c32bc426f92876ff171304ba935399014a04cd38 Mon Sep 17 00:00:00 2001 From: thortol Date: Tue, 9 Apr 2024 16:46:59 +0800 Subject: [PATCH 09/19] added more tests --- test/cadet/assessments/assessments_test.exs | 92 +++++++++++++++++++++ 1 file changed, 92 insertions(+) diff --git a/test/cadet/assessments/assessments_test.exs b/test/cadet/assessments/assessments_test.exs index 1d8917db6..4dac6411c 100644 --- a/test/cadet/assessments/assessments_test.exs +++ b/test/cadet/assessments/assessments_test.exs @@ -2652,6 +2652,98 @@ defmodule Cadet.AssessmentsTest do end ) end + + test "sorting by grading status ascending", %{ + course_regs: %{avenger1_cr: avenger}, + assessments: _assessments, + total_submissions: total_submissions + } do + {_, res} = + Assessments.submissions_by_grader_for_index(avenger, %{ + "pageSize" => total_submissions, + "sortBy" => "gradingStatus", + "sortDirection" => "sort-asc" + }) + + submissions_from_res = res[:data][:submissions] + + Enum.reduce( + submissions_from_res, + fn x, y -> + assert x.question_count - x.graded_count >= y.question_count - y.graded_count + y + end + ) + end + + test "sorting by grading status descending", %{ + course_regs: %{avenger1_cr: avenger}, + assessments: _assessments, + total_submissions: total_submissions + } do + {_, res} = + Assessments.submissions_by_grader_for_index(avenger, %{ + "pageSize" => total_submissions, + "sortBy" => "gradingStatus", + "sortDirection" => "sort-desc" + }) + + submissions_from_res = res[:data][:submissions] + + Enum.reduce( + submissions_from_res, + fn x, y -> + assert x.question_count - x.graded_count <= y.question_count - y.graded_count + y + end + ) + end + + test "sorting by xp ascending", %{ + course_regs: %{avenger1_cr: avenger}, + assessments: _assessments, + total_submissions: total_submissions + } do + {_, res} = + Assessments.submissions_by_grader_for_index(avenger, %{ + "pageSize" => total_submissions, + "sortBy" => "xp", + "sortDirection" => "sort-asc" + }) + + submissions_from_res = res[:data][:submissions] + + Enum.reduce( + submissions_from_res, + fn x, y -> + assert x.xp >= y.xp + y + end + ) + end + + test "sorting by xp descending", %{ + course_regs: %{avenger1_cr: avenger}, + assessments: _assessments, + total_submissions: total_submissions + } do + {_, res} = + Assessments.submissions_by_grader_for_index(avenger, %{ + "pageSize" => total_submissions, + "sortBy" => "xp", + "sortDirection" => "sort-desc" + }) + + submissions_from_res = res[:data][:submissions] + + Enum.reduce( + submissions_from_res, + fn x, y -> + assert x.xp <= y.xp + y + end + ) + end end defp get_answer_relative_scores(answers) do From eefb1a42a34d7cf1ef1f47d3348ad1c62854f9db Mon Sep 17 00:00:00 2001 From: thortol Date: Sun, 14 Apr 2024 18:22:53 +0800 Subject: [PATCH 10/19] updated grading sorter for progressStatus --- lib/cadet/assessments/assessments.ex | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/lib/cadet/assessments/assessments.ex b/lib/cadet/assessments/assessments.ex index e0a9a1f5e..dd254e0e8 100644 --- a/lib/cadet/assessments/assessments.ex +++ b/lib/cadet/assessments/assessments.ex @@ -1954,7 +1954,7 @@ defmodule Cadet.Assessments do # Given a query from submissions_by_grader_for_index, # sorts it by the relevant field and direction # sort_by is a string of either "", "assessmentName", "assessmentType", "studentName", - # "studentUsername", "groupName", "submissionStatus", "gradingStatus", "xp" + # "studentUsername", "groupName", "progressStatus", "xp" # sort_direction is a string of either "", "sort-asc", "sort-desc" defp sort_submission(query, sort_by, sort_direction) do if sort_direction == "sort-asc" do @@ -1985,11 +1985,8 @@ defmodule Cadet.Assessments do sort_by == "groupName" -> from([s, ans, asst, user] in query, order_by: s.team_id) - sort_by == "submissionStatus" -> - from([s, ans, asst, user] in query, order_by: s.status) - - sort_by == "gradingStatus" -> - from([s, ans, asst, user] in query, order_by: asst.question_count - ans.graded_count) + sort_by == "progressStatus" -> + from([s, ans, asst, user] in query, order_by: [asc: s.status, asc: s.is_grading_published]) sort_by == "xp" -> from([s, ans, asst, user] in query, order_by: ans.xp) @@ -2016,12 +2013,9 @@ defmodule Cadet.Assessments do sort_by == "groupName" -> from([s, ans, asst, user] in query, order_by: [desc: s.team_id]) - sort_by == "submissionStatus" -> - from([s, ans, asst, user] in query, order_by: [desc: s.status]) - - sort_by == "gradingStatus" -> + sort_by == "progressStatus" -> from([s, ans, asst, user] in query, - order_by: [desc: asst.question_count - ans.graded_count] + order_by: [desc: s.status, desc: s.is_grading_published] ) sort_by == "xp" -> From 82e7833d259bd1febd8c76a08a1ce3361598352f Mon Sep 17 00:00:00 2001 From: thortol Date: Mon, 15 Apr 2024 15:24:08 +0800 Subject: [PATCH 11/19] fixed test --- test/cadet/assessments/assessments_test.exs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/cadet/assessments/assessments_test.exs b/test/cadet/assessments/assessments_test.exs index d2f285808..763c9034d 100644 --- a/test/cadet/assessments/assessments_test.exs +++ b/test/cadet/assessments/assessments_test.exs @@ -2952,7 +2952,7 @@ defmodule Cadet.AssessmentsTest do ) end - test "sorting by grading status ascending", %{ + test "sorting by progress status ascending", %{ course_regs: %{avenger1_cr: avenger}, assessments: _assessments, total_submissions: total_submissions @@ -2960,7 +2960,7 @@ defmodule Cadet.AssessmentsTest do {_, res} = Assessments.submissions_by_grader_for_index(avenger, %{ "pageSize" => total_submissions, - "sortBy" => "gradingStatus", + "sortBy" => "progressStatus", "sortDirection" => "sort-asc" }) @@ -2969,13 +2969,13 @@ defmodule Cadet.AssessmentsTest do Enum.reduce( submissions_from_res, fn x, y -> - assert x.question_count - x.graded_count >= y.question_count - y.graded_count + assert x.is_grading_published >= y.is_grading_published y end ) end - test "sorting by grading status descending", %{ + test "sorting by progress status descending", %{ course_regs: %{avenger1_cr: avenger}, assessments: _assessments, total_submissions: total_submissions @@ -2983,7 +2983,7 @@ defmodule Cadet.AssessmentsTest do {_, res} = Assessments.submissions_by_grader_for_index(avenger, %{ "pageSize" => total_submissions, - "sortBy" => "gradingStatus", + "sortBy" => "progressStatus", "sortDirection" => "sort-desc" }) @@ -2992,7 +2992,7 @@ defmodule Cadet.AssessmentsTest do Enum.reduce( submissions_from_res, fn x, y -> - assert x.question_count - x.graded_count <= y.question_count - y.graded_count + assert x.is_grading_published <= y.is_grading_published y end ) From 853aa2a9534f07ead762fa396e90151a62c7910e Mon Sep 17 00:00:00 2001 From: thortol Date: Mon, 15 Apr 2024 15:26:47 +0800 Subject: [PATCH 12/19] fixed sorting by group bug and made sorting work regardless of upper lower case --- lib/cadet/assessments/assessments.ex | 34 ++++++++++++++++------------ 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/lib/cadet/assessments/assessments.ex b/lib/cadet/assessments/assessments.ex index dd254e0e8..70f668f64 100644 --- a/lib/cadet/assessments/assessments.ex +++ b/lib/cadet/assessments/assessments.ex @@ -1900,6 +1900,12 @@ defmodule Cadet.Assessments do left_join: user in User, on: user.id == s.student_id, as: :user, + left_join: cr in CourseRegistration, + on: user.id == cr.user_id, + as: :cr, + left_join: group in Group, + on: cr.group_id == group.id, + as: :group, where: ^build_user_filter(params), where: s.assessment_id in subquery(build_assessment_filter(params, course_id)), where: s.assessment_id in subquery(build_assessment_config_filter(params)), @@ -1927,7 +1933,7 @@ defmodule Cadet.Assessments do query = sort_submission(query, Map.get(params, "sortBy", ""), Map.get(params, "sortDirection", "")) - query = from([s, ans, asst, user] in query, order_by: [desc: s.inserted_at]) + query = from([s, ans, asst, user, cr, group] in query, order_by: [desc: s.inserted_at]) submissions = Repo.all(query) count_query = @@ -1971,25 +1977,25 @@ defmodule Cadet.Assessments do defp sort_submission_asc(query, sort_by) do cond do sort_by == "assessmentName" -> - from([s, ans, asst, user] in query, order_by: asst.title) + from([s, ans, asst, user, cr, group] in query, order_by: fragment("upper(?)", asst.title)) sort_by == "assessmentType" -> - from([s, ans, asst, user] in query, order_by: asst.config_id) + from([s, ans, asst, user, cr, group] in query, order_by: asst.config_id) sort_by == "studentName" -> - from([s, ans, asst, user] in query, order_by: user.name) + from([s, ans, asst, user, cr, group] in query, order_by: fragment("upper(?)", user.name)) sort_by == "studentUsername" -> - from([s, ans, asst, user] in query, order_by: user.username) + from([s, ans, asst, user, cr, group] in query, order_by: fragment("upper(?)", user.username)) sort_by == "groupName" -> - from([s, ans, asst, user] in query, order_by: s.team_id) + from([s, ans, asst, user, cr, group] in query, order_by: fragment("upper(?)", group.name)) sort_by == "progressStatus" -> - from([s, ans, asst, user] in query, order_by: [asc: s.status, asc: s.is_grading_published]) + from([s, ans, asst, user, cr, group] in query, order_by: [asc: s.status, asc: s.is_grading_published]) sort_by == "xp" -> - from([s, ans, asst, user] in query, order_by: ans.xp) + from([s, ans, asst, user, cr, group] in query, order_by: ans.xp) true -> query @@ -1999,22 +2005,22 @@ defmodule Cadet.Assessments do defp sort_submission_desc(query, sort_by) do cond do sort_by == "assessmentName" -> - from([s, ans, asst, user] in query, order_by: [desc: asst.title]) + from([s, ans, asst, user, cr, group] in query, order_by: [desc: fragment("upper(?)", asst.title)]) sort_by == "assessmentType" -> - from([s, ans, asst, user] in query, order_by: [desc: asst.config_id]) + from([s, ans, asst, user, cr, group] in query, order_by: [desc: asst.config_id]) sort_by == "studentName" -> - from([s, ans, asst, user] in query, order_by: [desc: user.name]) + from([s, ans, asst, user, cr, group] in query, order_by: [desc: fragment("upper(?)", user.name)]) sort_by == "studentUsername" -> - from([s, ans, asst, user] in query, order_by: [desc: user.username]) + from([s, ans, asst, user, cr, group] in query, order_by: [desc: fragment("upper(?)", user.username)]) sort_by == "groupName" -> - from([s, ans, asst, user] in query, order_by: [desc: s.team_id]) + from([s, ans, asst, user, cr, group] in query, order_by: [desc: fragment("upper(?)", group.name)]) sort_by == "progressStatus" -> - from([s, ans, asst, user] in query, + from([s, ans, asst, user, cr, group] in query, order_by: [desc: s.status, desc: s.is_grading_published] ) From fc87f681fb126f3aab668dedfc6c707b8320c74f Mon Sep 17 00:00:00 2001 From: thortol Date: Mon, 15 Apr 2024 15:28:50 +0800 Subject: [PATCH 13/19] fixed formatting --- lib/cadet/assessments/assessments.ex | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/lib/cadet/assessments/assessments.ex b/lib/cadet/assessments/assessments.ex index 70f668f64..d38cb759f 100644 --- a/lib/cadet/assessments/assessments.ex +++ b/lib/cadet/assessments/assessments.ex @@ -1986,13 +1986,17 @@ defmodule Cadet.Assessments do from([s, ans, asst, user, cr, group] in query, order_by: fragment("upper(?)", user.name)) sort_by == "studentUsername" -> - from([s, ans, asst, user, cr, group] in query, order_by: fragment("upper(?)", user.username)) + from([s, ans, asst, user, cr, group] in query, + order_by: fragment("upper(?)", user.username) + ) sort_by == "groupName" -> from([s, ans, asst, user, cr, group] in query, order_by: fragment("upper(?)", group.name)) sort_by == "progressStatus" -> - from([s, ans, asst, user, cr, group] in query, order_by: [asc: s.status, asc: s.is_grading_published]) + from([s, ans, asst, user, cr, group] in query, + order_by: [asc: s.status, asc: s.is_grading_published] + ) sort_by == "xp" -> from([s, ans, asst, user, cr, group] in query, order_by: ans.xp) @@ -2005,19 +2009,27 @@ defmodule Cadet.Assessments do defp sort_submission_desc(query, sort_by) do cond do sort_by == "assessmentName" -> - from([s, ans, asst, user, cr, group] in query, order_by: [desc: fragment("upper(?)", asst.title)]) + from([s, ans, asst, user, cr, group] in query, + order_by: [desc: fragment("upper(?)", asst.title)] + ) sort_by == "assessmentType" -> from([s, ans, asst, user, cr, group] in query, order_by: [desc: asst.config_id]) sort_by == "studentName" -> - from([s, ans, asst, user, cr, group] in query, order_by: [desc: fragment("upper(?)", user.name)]) + from([s, ans, asst, user, cr, group] in query, + order_by: [desc: fragment("upper(?)", user.name)] + ) sort_by == "studentUsername" -> - from([s, ans, asst, user, cr, group] in query, order_by: [desc: fragment("upper(?)", user.username)]) + from([s, ans, asst, user, cr, group] in query, + order_by: [desc: fragment("upper(?)", user.username)] + ) sort_by == "groupName" -> - from([s, ans, asst, user, cr, group] in query, order_by: [desc: fragment("upper(?)", group.name)]) + from([s, ans, asst, user, cr, group] in query, + order_by: [desc: fragment("upper(?)", group.name)] + ) sort_by == "progressStatus" -> from([s, ans, asst, user, cr, group] in query, From 06154b6171ce3824f3680ee6ede6bf585f68d5fe Mon Sep 17 00:00:00 2001 From: thortol Date: Tue, 16 Apr 2024 23:30:02 +0800 Subject: [PATCH 14/19] fixed bug where xp was not sorted properly --- lib/cadet/assessments/assessments.ex | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/cadet/assessments/assessments.ex b/lib/cadet/assessments/assessments.ex index d38cb759f..fb43080be 100644 --- a/lib/cadet/assessments/assessments.ex +++ b/lib/cadet/assessments/assessments.ex @@ -1999,7 +1999,7 @@ defmodule Cadet.Assessments do ) sort_by == "xp" -> - from([s, ans, asst, user, cr, group] in query, order_by: ans.xp) + from([s, ans, asst, user, cr, group] in query, order_by: ans.xp + ans.xp_adjustment) true -> query @@ -2037,7 +2037,9 @@ defmodule Cadet.Assessments do ) sort_by == "xp" -> - from([s, ans, asst, user] in query, order_by: [desc: ans.xp]) + from([s, ans, asst, user, cr, group] in query, + order_by: [desc: ans.xp + ans.xp_adjustment] + ) true -> query From 0412aee955d78b89383409b1eebd25e03de4fb8c Mon Sep 17 00:00:00 2001 From: thortol Date: Tue, 16 Apr 2024 23:55:28 +0800 Subject: [PATCH 15/19] fixed sorting by grading bug --- lib/cadet/assessments/assessments.ex | 53 +++++++++++++++++++--------- 1 file changed, 37 insertions(+), 16 deletions(-) diff --git a/lib/cadet/assessments/assessments.ex b/lib/cadet/assessments/assessments.ex index fb43080be..4a447ce49 100644 --- a/lib/cadet/assessments/assessments.ex +++ b/lib/cadet/assessments/assessments.ex @@ -1906,6 +1906,9 @@ defmodule Cadet.Assessments do left_join: group in Group, on: cr.group_id == group.id, as: :group, + inner_join: config in AssessmentConfig, + on: asst.config_id == config.id, + as: :config, where: ^build_user_filter(params), where: s.assessment_id in subquery(build_assessment_filter(params, course_id)), where: s.assessment_id in subquery(build_assessment_config_filter(params)), @@ -1977,29 +1980,42 @@ defmodule Cadet.Assessments do defp sort_submission_asc(query, sort_by) do cond do sort_by == "assessmentName" -> - from([s, ans, asst, user, cr, group] in query, order_by: fragment("upper(?)", asst.title)) + from([s, ans, asst, user, cr, group, config] in query, + order_by: fragment("upper(?)", asst.title) + ) sort_by == "assessmentType" -> - from([s, ans, asst, user, cr, group] in query, order_by: asst.config_id) + from([s, ans, asst, user, cr, group, config] in query, order_by: asst.config_id) sort_by == "studentName" -> - from([s, ans, asst, user, cr, group] in query, order_by: fragment("upper(?)", user.name)) + from([s, ans, asst, user, cr, group, config] in query, + order_by: fragment("upper(?)", user.name) + ) sort_by == "studentUsername" -> - from([s, ans, asst, user, cr, group] in query, + from([s, ans, asst, user, cr, group, config] in query, order_by: fragment("upper(?)", user.username) ) sort_by == "groupName" -> - from([s, ans, asst, user, cr, group] in query, order_by: fragment("upper(?)", group.name)) + from([s, ans, asst, user, cr, group, config] in query, + order_by: fragment("upper(?)", group.name) + ) sort_by == "progressStatus" -> - from([s, ans, asst, user, cr, group] in query, - order_by: [asc: s.status, asc: s.is_grading_published] + from([s, ans, asst, user, cr, group, config] in query, + order_by: [ + asc: config.is_manually_graded, + asc: s.status, + asc: ans.graded_count - asst.question_count, + asc: s.is_grading_published + ] ) sort_by == "xp" -> - from([s, ans, asst, user, cr, group] in query, order_by: ans.xp + ans.xp_adjustment) + from([s, ans, asst, user, cr, group, config] in query, + order_by: ans.xp + ans.xp_adjustment + ) true -> query @@ -2009,35 +2025,40 @@ defmodule Cadet.Assessments do defp sort_submission_desc(query, sort_by) do cond do sort_by == "assessmentName" -> - from([s, ans, asst, user, cr, group] in query, + from([s, ans, asst, user, cr, group, config] in query, order_by: [desc: fragment("upper(?)", asst.title)] ) sort_by == "assessmentType" -> - from([s, ans, asst, user, cr, group] in query, order_by: [desc: asst.config_id]) + from([s, ans, asst, user, cr, group, config] in query, order_by: [desc: asst.config_id]) sort_by == "studentName" -> - from([s, ans, asst, user, cr, group] in query, + from([s, ans, asst, user, cr, group, config] in query, order_by: [desc: fragment("upper(?)", user.name)] ) sort_by == "studentUsername" -> - from([s, ans, asst, user, cr, group] in query, + from([s, ans, asst, user, cr, group, config] in query, order_by: [desc: fragment("upper(?)", user.username)] ) sort_by == "groupName" -> - from([s, ans, asst, user, cr, group] in query, + from([s, ans, asst, user, cr, group, config] in query, order_by: [desc: fragment("upper(?)", group.name)] ) sort_by == "progressStatus" -> - from([s, ans, asst, user, cr, group] in query, - order_by: [desc: s.status, desc: s.is_grading_published] + from([s, ans, asst, user, cr, group, config] in query, + order_by: [ + desc: config.is_manually_graded, + desc: s.status, + desc: ans.graded_count - asst.question_count, + desc: s.is_grading_published + ] ) sort_by == "xp" -> - from([s, ans, asst, user, cr, group] in query, + from([s, ans, asst, user, cr, group, config] in query, order_by: [desc: ans.xp + ans.xp_adjustment] ) From c624803a994955e1a63ecdb4def74ac758733ead Mon Sep 17 00:00:00 2001 From: thortol Date: Tue, 16 Apr 2024 23:55:36 +0800 Subject: [PATCH 16/19] fixed test --- test/cadet/assessments/assessments_test.exs | 46 --------------------- 1 file changed, 46 deletions(-) diff --git a/test/cadet/assessments/assessments_test.exs b/test/cadet/assessments/assessments_test.exs index 763c9034d..750861657 100644 --- a/test/cadet/assessments/assessments_test.exs +++ b/test/cadet/assessments/assessments_test.exs @@ -2952,52 +2952,6 @@ defmodule Cadet.AssessmentsTest do ) end - test "sorting by progress status ascending", %{ - course_regs: %{avenger1_cr: avenger}, - assessments: _assessments, - total_submissions: total_submissions - } do - {_, res} = - Assessments.submissions_by_grader_for_index(avenger, %{ - "pageSize" => total_submissions, - "sortBy" => "progressStatus", - "sortDirection" => "sort-asc" - }) - - submissions_from_res = res[:data][:submissions] - - Enum.reduce( - submissions_from_res, - fn x, y -> - assert x.is_grading_published >= y.is_grading_published - y - end - ) - end - - test "sorting by progress status descending", %{ - course_regs: %{avenger1_cr: avenger}, - assessments: _assessments, - total_submissions: total_submissions - } do - {_, res} = - Assessments.submissions_by_grader_for_index(avenger, %{ - "pageSize" => total_submissions, - "sortBy" => "progressStatus", - "sortDirection" => "sort-desc" - }) - - submissions_from_res = res[:data][:submissions] - - Enum.reduce( - submissions_from_res, - fn x, y -> - assert x.is_grading_published <= y.is_grading_published - y - end - ) - end - test "sorting by xp ascending", %{ course_regs: %{avenger1_cr: avenger}, assessments: _assessments, From 415cdc089921aef1ed2203910ef0b16fd659c451 Mon Sep 17 00:00:00 2001 From: Richard Dominick <34370238+RichDom2185@users.noreply.github.com> Date: Mon, 19 Aug 2024 16:29:38 +0800 Subject: [PATCH 17/19] Prefer piping --- lib/cadet/assessments/assessments.ex | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/cadet/assessments/assessments.ex b/lib/cadet/assessments/assessments.ex index 4d6685df0..8aade5238 100644 --- a/lib/cadet/assessments/assessments.ex +++ b/lib/cadet/assessments/assessments.ex @@ -1978,9 +1978,7 @@ defmodule Cadet.Assessments do question_count: asst.question_count } ) - - query = - sort_submission(query, Map.get(params, "sortBy", ""), Map.get(params, "sortDirection", "")) + |> sort_submission(Map.get(params, "sortBy", ""), Map.get(params, "sortDirection", "")) query = from([s, ans, asst, user, cr, group] in query, order_by: [desc: s.inserted_at]) submissions = Repo.all(query) From a4e4858b18832012840b731ef3c644038502d89a Mon Sep 17 00:00:00 2001 From: Richard Dominick <34370238+RichDom2185@users.noreply.github.com> Date: Mon, 19 Aug 2024 16:31:34 +0800 Subject: [PATCH 18/19] Reduce nesting --- lib/cadet/assessments/assessments.ex | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/lib/cadet/assessments/assessments.ex b/lib/cadet/assessments/assessments.ex index 8aade5238..7cb814344 100644 --- a/lib/cadet/assessments/assessments.ex +++ b/lib/cadet/assessments/assessments.ex @@ -2010,14 +2010,15 @@ defmodule Cadet.Assessments do # "studentUsername", "groupName", "progressStatus", "xp" # sort_direction is a string of either "", "sort-asc", "sort-desc" defp sort_submission(query, sort_by, sort_direction) do - if sort_direction == "sort-asc" do - sort_submission_asc(query, sort_by) - else - if sort_direction == "sort-desc" do + cond do + sort_direction == "sort-asc" -> + sort_submission_asc(query, sort_by) + + sort_direction == "sort-desc" -> sort_submission_desc(query, sort_by) - else + + true -> query - end end end From 842cef1bca5024e5e92aa7422413777e6eca363c Mon Sep 17 00:00:00 2001 From: Richard Dominick <34370238+RichDom2185@users.noreply.github.com> Date: Mon, 19 Aug 2024 16:34:44 +0800 Subject: [PATCH 19/19] Revert "Prefer piping" This reverts commit 415cdc089921aef1ed2203910ef0b16fd659c451. --- 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 7cb814344..ced5441e1 100644 --- a/lib/cadet/assessments/assessments.ex +++ b/lib/cadet/assessments/assessments.ex @@ -1978,7 +1978,9 @@ defmodule Cadet.Assessments do question_count: asst.question_count } ) - |> sort_submission(Map.get(params, "sortBy", ""), Map.get(params, "sortDirection", "")) + + 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]) submissions = Repo.all(query)