From 57002030b68f159bc0e8b75287bc601fb045644f Mon Sep 17 00:00:00 2001 From: GabrielCWT <77312579+GabrielCWT@users.noreply.github.com> Date: Sat, 24 Feb 2024 15:38:23 +0800 Subject: [PATCH 01/15] feat: Implement ungraded submission function A dedicated function for Avenger backlog email notifications, it only fetches necessities (assessment_title, student_name and submission_id) --- lib/cadet/assessments/assessments.ex | 59 ++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/lib/cadet/assessments/assessments.ex b/lib/cadet/assessments/assessments.ex index 3e88fac0a..dbe686de2 100644 --- a/lib/cadet/assessments/assessments.ex +++ b/lib/cadet/assessments/assessments.ex @@ -1455,6 +1455,65 @@ defmodule Cadet.Assessments do ) end + def get_ungraded_submission_for_email_notification(avenger_cr) do + submission_answers_query = + from(ans in Answer, + group_by: ans.submission_id, + select: %{ + submission_id: ans.submission_id, + graded_count: filter(count(ans.id), not is_nil(ans.grader_id)) + } + ) + + question_answers_query = + from(q in Question, + group_by: q.assessment_id, + join: a in Assessment, + on: q.assessment_id == a.id, + select: %{ + assessment_id: q.assessment_id, + question_count: count(q.id) + } + ) + + query = + from(s in Submission, + left_join: ans in subquery(submission_answers_query), + on: ans.submission_id == s.id, + as: :ans, + left_join: asst in subquery(question_answers_query), + on: asst.assessment_id == s.assessment_id, + as: :asst, + where: s.status == "submitted", + where: asst.question_count > ans.graded_count, + where: s.student_id in subquery( + from(cr in CourseRegistration, + join: g in Group, + on: cr.group_id == g.id, + where: g.leader_id == ^avenger_cr.id, + select: cr.id + ) + ) or s.student_id == ^avenger_cr.id, + select: %{ + id: s.id, + student_id: s.student_id, + assessment_id: s.assessment_id + } + ) + + submissions = Repo.all(query) + formatted_submissions = Enum.map(submissions, fn submission -> + student_name = Repo.get(User, submission.student_id).name + assessment_title = Repo.get(Assessment, submission.assessment_id).title + %{ + student_name: student_name, + assessment_title: assessment_title, + submission_id: submission.id + } + end) + {:ok, formatted_submissions} + end + defp generate_grading_summary_view_model(submissions, course_id) do users = CourseRegistration From 51b7fffbfcea7af0cfe44b0bd69c7c4e76e819ee Mon Sep 17 00:00:00 2001 From: GabrielCWT <77312579+GabrielCWT@users.noreply.github.com> Date: Sat, 24 Feb 2024 15:38:54 +0800 Subject: [PATCH 02/15] refactor: Update template to use new function --- lib/cadet_web/templates/email/avenger_backlog.html.eex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/cadet_web/templates/email/avenger_backlog.html.eex b/lib/cadet_web/templates/email/avenger_backlog.html.eex index 1bd59d74b..6440434f8 100644 --- a/lib/cadet_web/templates/email/avenger_backlog.html.eex +++ b/lib/cadet_web/templates/email/avenger_backlog.html.eex @@ -3,7 +3,7 @@ You have ungraded submissions. Please review and grade the following submissions as soon as possible. <%= for s <- @submissions do %> -
<%= s["assessment"]["title"] %> by <%= s["student"]["name"]%>
+<%= s[:assessment_title] %> by <%= s[:student_name] %>
<% end %> Unsubscribe from this email topic. From a422e2cddc762b1dabcb3446cd46a458cbfb63e6 Mon Sep 17 00:00:00 2001 From: GabrielCWT <77312579+GabrielCWT@users.noreply.github.com> Date: Sat, 24 Feb 2024 15:39:54 +0800 Subject: [PATCH 03/15] refactor: Cron job to use new function --- lib/cadet/workers/NotificationWorker.ex | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/lib/cadet/workers/NotificationWorker.ex b/lib/cadet/workers/NotificationWorker.ex index 67913a033..32ea27d52 100644 --- a/lib/cadet/workers/NotificationWorker.ex +++ b/lib/cadet/workers/NotificationWorker.ex @@ -69,16 +69,10 @@ defmodule Cadet.Workers.NotificationWorker do for course_id <- Cadet.Courses.get_all_course_ids() do if is_course_enabled(notification_type_id, course_id, nil) do avengers_crs = Cadet.Accounts.CourseRegistrations.get_staffs(course_id) - for avenger_cr <- avengers_crs do avenger = Cadet.Accounts.get_user(avenger_cr.user_id) - - {:ok, %{data: %{submissions: ungraded_submissions}}} = - Cadet.Assessments.submissions_by_grader_for_index(avenger_cr, %{ - "group" => "true", - "notFullyGraded" => "true" - }) - + {:ok, ungraded_submissions} = + Cadet.Assessments.get_ungraded_submission_for_email_notification(avenger_cr) if Enum.count(ungraded_submissions) < ungraded_threshold do IO.puts("[AVENGER_BACKLOG] below threshold!") else @@ -90,7 +84,6 @@ defmodule Cadet.Workers.NotificationWorker do avenger, ungraded_submissions ) - {status, email} = Mailer.deliver_now(email) if status == :ok do From 679e53b630001371489ced03ab341367f2a1cfb3 Mon Sep 17 00:00:00 2001 From: GabrielCWT <77312579+GabrielCWT@users.noreply.github.com> Date: Sat, 24 Feb 2024 15:42:38 +0800 Subject: [PATCH 04/15] refactor: Fix format --- lib/cadet/assessments/assessments.ex | 39 ++++++++++++++----------- lib/cadet/workers/NotificationWorker.ex | 4 +++ 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/lib/cadet/assessments/assessments.ex b/lib/cadet/assessments/assessments.ex index dbe686de2..24f8874d1 100644 --- a/lib/cadet/assessments/assessments.ex +++ b/lib/cadet/assessments/assessments.ex @@ -1486,14 +1486,15 @@ defmodule Cadet.Assessments do as: :asst, where: s.status == "submitted", where: asst.question_count > ans.graded_count, - where: s.student_id in subquery( - from(cr in CourseRegistration, - join: g in Group, - on: cr.group_id == g.id, - where: g.leader_id == ^avenger_cr.id, - select: cr.id - ) - ) or s.student_id == ^avenger_cr.id, + where: + s.student_id in subquery( + from(cr in CourseRegistration, + join: g in Group, + on: cr.group_id == g.id, + where: g.leader_id == ^avenger_cr.id, + select: cr.id + ) + ) or s.student_id == ^avenger_cr.id, select: %{ id: s.id, student_id: s.student_id, @@ -1502,15 +1503,19 @@ defmodule Cadet.Assessments do ) submissions = Repo.all(query) - formatted_submissions = Enum.map(submissions, fn submission -> - student_name = Repo.get(User, submission.student_id).name - assessment_title = Repo.get(Assessment, submission.assessment_id).title - %{ - student_name: student_name, - assessment_title: assessment_title, - submission_id: submission.id - } - end) + + formatted_submissions = + Enum.map(submissions, fn submission -> + student_name = Repo.get(User, submission.student_id).name + assessment_title = Repo.get(Assessment, submission.assessment_id).title + + %{ + student_name: student_name, + assessment_title: assessment_title, + submission_id: submission.id + } + end) + {:ok, formatted_submissions} end diff --git a/lib/cadet/workers/NotificationWorker.ex b/lib/cadet/workers/NotificationWorker.ex index 32ea27d52..c4576ffc1 100644 --- a/lib/cadet/workers/NotificationWorker.ex +++ b/lib/cadet/workers/NotificationWorker.ex @@ -69,10 +69,13 @@ defmodule Cadet.Workers.NotificationWorker do for course_id <- Cadet.Courses.get_all_course_ids() do if is_course_enabled(notification_type_id, course_id, nil) do avengers_crs = Cadet.Accounts.CourseRegistrations.get_staffs(course_id) + for avenger_cr <- avengers_crs do avenger = Cadet.Accounts.get_user(avenger_cr.user_id) + {:ok, ungraded_submissions} = Cadet.Assessments.get_ungraded_submission_for_email_notification(avenger_cr) + if Enum.count(ungraded_submissions) < ungraded_threshold do IO.puts("[AVENGER_BACKLOG] below threshold!") else @@ -84,6 +87,7 @@ defmodule Cadet.Workers.NotificationWorker do avenger, ungraded_submissions ) + {status, email} = Mailer.deliver_now(email) if status == :ok do From 0235dd32797b1adc088eab952d2f5f06364d9288 Mon Sep 17 00:00:00 2001 From: GabrielCWT <77312579+GabrielCWT@users.noreply.github.com> Date: Sat, 24 Feb 2024 15:49:30 +0800 Subject: [PATCH 05/15] fix: Fix test to use new function --- test/cadet/email_test.exs | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/test/cadet/email_test.exs b/test/cadet/email_test.exs index e7c1ec3e6..f61a9e72c 100644 --- a/test/cadet/email_test.exs +++ b/test/cadet/email_test.exs @@ -24,11 +24,8 @@ defmodule Cadet.EmailTest do avenger_user = insert(:user, %{email: "test@gmail.com"}) avenger = insert(:course_registration, %{user: avenger_user, role: :staff}) - {:ok, %{data: %{submissions: ungraded_submissions}}} = - Cadet.Assessments.submissions_by_grader_for_index(avenger, %{ - "group" => "true", - "ungradedOnly" => "true" - }) + {:ok, ungraded_submissions} = + Cadet.Assessments.get_ungraded_submission_for_email_notification(avenger) email = Email.avenger_backlog_email("avenger_backlog", avenger_user, ungraded_submissions) From c3475a13848eaa7e1f2338640007c48430a183ba Mon Sep 17 00:00:00 2001 From: GabrielCWT <77312579+GabrielCWT@users.noreply.github.com> Date: Sat, 24 Feb 2024 17:17:26 +0800 Subject: [PATCH 06/15] fix: Fix notification worker to use new function --- .../notification_worker/notification_worker_test.exs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/test/cadet/jobs/notification_worker/notification_worker_test.exs b/test/cadet/jobs/notification_worker/notification_worker_test.exs index 9368a033c..6e32d9f18 100644 --- a/test/cadet/jobs/notification_worker/notification_worker_test.exs +++ b/test/cadet/jobs/notification_worker/notification_worker_test.exs @@ -18,12 +18,9 @@ defmodule Cadet.NotificationWorker.NotificationWorkerTest do submission = List.first(List.first(data.mcq_answers)).submission # setup for avenger backlog - {:ok, %{data: %{submissions: ungraded_submissions}}} = - Cadet.Assessments.submissions_by_grader_for_index(avenger_cr, %{ - "group" => "true", - "notFullyGraded" => "true" - }) - + {:ok, ungraded_submissions} = + Cadet.Assessments.get_ungraded_submission_for_email_notification(avenger_cr) + IO.inspect(ungraded_submissions) Repo.update_all(NotificationType, set: [is_enabled: true]) Repo.update_all(NotificationConfig, set: [is_enabled: true]) @@ -41,6 +38,7 @@ defmodule Cadet.NotificationWorker.NotificationWorkerTest do perform_job(NotificationWorker, %{"notification_type" => "avenger_backlog"}) avenger_email = avenger_user.email + assert_delivered_email_matches(%{to: [{_, ^avenger_email}]}) end From 0830121460caf9c5702fdb4467fc803f5e05e785 Mon Sep 17 00:00:00 2001 From: GabrielCWT <77312579+GabrielCWT@users.noreply.github.com> Date: Sat, 24 Feb 2024 17:18:51 +0800 Subject: [PATCH 07/15] feat: Add status of submitted to test seed --- test/support/seeds.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/support/seeds.ex b/test/support/seeds.ex index e88ec7f21..d87a2230c 100644 --- a/test/support/seeds.ex +++ b/test/support/seeds.ex @@ -180,7 +180,7 @@ defmodule Cadet.Test.Seeds do submissions = students |> Enum.take(2) - |> Enum.map(&insert(:submission, %{assessment: assessment, student: &1})) + |> Enum.map(&insert(:submission, %{assessment: assessment, student: &1, status: :submitted})) # Programming Answers programming_answers = From 9892ad13d7cbad761a68ad99822754345e4bc12f Mon Sep 17 00:00:00 2001 From: GabrielCWT <77312579+GabrielCWT@users.noreply.github.com> Date: Sat, 24 Feb 2024 17:19:43 +0800 Subject: [PATCH 08/15] Fix bug in implemented function student_id is pointing to course registration id instead of user id --- lib/cadet/assessments/assessments.ex | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/cadet/assessments/assessments.ex b/lib/cadet/assessments/assessments.ex index 24f8874d1..c4bdef15c 100644 --- a/lib/cadet/assessments/assessments.ex +++ b/lib/cadet/assessments/assessments.ex @@ -1506,9 +1506,8 @@ defmodule Cadet.Assessments do formatted_submissions = Enum.map(submissions, fn submission -> - student_name = Repo.get(User, submission.student_id).name + student_name = CourseRegistration |> join(:inner, [cr], u in assoc(cr, :user)) |> where([cr], cr.id == ^submission.student_id) |> select([cr, u], u.name) |> Repo.one() assessment_title = Repo.get(Assessment, submission.assessment_id).title - %{ student_name: student_name, assessment_title: assessment_title, From f3dcf6ff8a3e654f9cbddaa72f7ea23c74f0ccba Mon Sep 17 00:00:00 2001 From: GabrielCWT <77312579+GabrielCWT@users.noreply.github.com> Date: Sat, 24 Feb 2024 17:21:08 +0800 Subject: [PATCH 09/15] refactor: Format and remove IO.inspect --- lib/cadet/assessments/assessments.ex | 9 ++++++++- .../notification_worker/notification_worker_test.exs | 4 ++-- test/support/seeds.ex | 4 +++- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/lib/cadet/assessments/assessments.ex b/lib/cadet/assessments/assessments.ex index c4bdef15c..3a0de9b23 100644 --- a/lib/cadet/assessments/assessments.ex +++ b/lib/cadet/assessments/assessments.ex @@ -1506,8 +1506,15 @@ defmodule Cadet.Assessments do formatted_submissions = Enum.map(submissions, fn submission -> - student_name = CourseRegistration |> join(:inner, [cr], u in assoc(cr, :user)) |> where([cr], cr.id == ^submission.student_id) |> select([cr, u], u.name) |> Repo.one() + student_name = + CourseRegistration + |> join(:inner, [cr], u in assoc(cr, :user)) + |> where([cr], cr.id == ^submission.student_id) + |> select([cr, u], u.name) + |> Repo.one() + assessment_title = Repo.get(Assessment, submission.assessment_id).title + %{ student_name: student_name, assessment_title: assessment_title, diff --git a/test/cadet/jobs/notification_worker/notification_worker_test.exs b/test/cadet/jobs/notification_worker/notification_worker_test.exs index 6e32d9f18..49e772873 100644 --- a/test/cadet/jobs/notification_worker/notification_worker_test.exs +++ b/test/cadet/jobs/notification_worker/notification_worker_test.exs @@ -18,9 +18,9 @@ defmodule Cadet.NotificationWorker.NotificationWorkerTest do submission = List.first(List.first(data.mcq_answers)).submission # setup for avenger backlog - {:ok, ungraded_submissions} = + {:ok, ungraded_submissions} = Cadet.Assessments.get_ungraded_submission_for_email_notification(avenger_cr) - IO.inspect(ungraded_submissions) + Repo.update_all(NotificationType, set: [is_enabled: true]) Repo.update_all(NotificationConfig, set: [is_enabled: true]) diff --git a/test/support/seeds.ex b/test/support/seeds.ex index d87a2230c..1603f3d3e 100644 --- a/test/support/seeds.ex +++ b/test/support/seeds.ex @@ -180,7 +180,9 @@ defmodule Cadet.Test.Seeds do submissions = students |> Enum.take(2) - |> Enum.map(&insert(:submission, %{assessment: assessment, student: &1, status: :submitted})) + |> Enum.map( + &insert(:submission, %{assessment: assessment, student: &1, status: :submitted}) + ) # Programming Answers programming_answers = From 12625448075d6182da2e01b8675cc8fed1afbf3c Mon Sep 17 00:00:00 2001 From: GabrielCWT <77312579+GabrielCWT@users.noreply.github.com> Date: Sun, 25 Feb 2024 07:41:34 +0800 Subject: [PATCH 10/15] refactor: Change queries to use piping. --- lib/cadet/assessments/assessments.ex | 73 ++++++++++++---------------- 1 file changed, 31 insertions(+), 42 deletions(-) diff --git a/lib/cadet/assessments/assessments.ex b/lib/cadet/assessments/assessments.ex index 0bfb47120..de3138fae 100644 --- a/lib/cadet/assessments/assessments.ex +++ b/lib/cadet/assessments/assessments.ex @@ -1551,52 +1551,41 @@ defmodule Cadet.Assessments do def get_ungraded_submission_for_email_notification(avenger_cr) do submission_answers_query = - from(ans in Answer, - group_by: ans.submission_id, - select: %{ - submission_id: ans.submission_id, - graded_count: filter(count(ans.id), not is_nil(ans.grader_id)) - } - ) + Answer + |> group_by([ans], ans.submission_id) + |> select([ans], %{ + submission_id: ans.submission_id, + graded_count: filter(count(ans.id), not is_nil(ans.grader_id)) + }) question_answers_query = - from(q in Question, - group_by: q.assessment_id, - join: a in Assessment, - on: q.assessment_id == a.id, - select: %{ - assessment_id: q.assessment_id, - question_count: count(q.id) - } - ) + Question + |> group_by([q], q.assessment_id) + |> join(:left, [q], asst in assoc(q, :assessment)) + |> select([q, asst], %{assessment_id: q.assessment_id, question_count: count(q.id)}) - query = - from(s in Submission, - left_join: ans in subquery(submission_answers_query), - on: ans.submission_id == s.id, - as: :ans, - left_join: asst in subquery(question_answers_query), - on: asst.assessment_id == s.assessment_id, - as: :asst, - where: s.status == "submitted", - where: asst.question_count > ans.graded_count, - where: - s.student_id in subquery( - from(cr in CourseRegistration, - join: g in Group, - on: cr.group_id == g.id, - where: g.leader_id == ^avenger_cr.id, - select: cr.id - ) - ) or s.student_id == ^avenger_cr.id, - select: %{ - id: s.id, - student_id: s.student_id, - assessment_id: s.assessment_id - } - ) + student_query = + CourseRegistration + |> join(:inner, [cr], g in assoc(cr, :group)) + |> where([cr, g], g.leader_id == ^avenger_cr.id) + |> select([cr, _], cr.id) - submissions = Repo.all(query) + submissions = + Submission + |> join(:inner, [s], ans in subquery(submission_answers_query), + on: s.id == ans.submission_id + ) + |> join(:inner, [s, ans], asst in subquery(question_answers_query), + on: s.assessment_id == asst.assessment_id + ) + |> where([s, _, _], s.status == "submitted") + |> where([_, ans, asst], asst.question_count > ans.graded_count) + |> where( + [s, _, _], + s.student_id in subquery(student_query) or s.student_id == ^avenger_cr.id + ) + |> select([s, _, _], %{id: s.id, student_id: s.student_id, assessment_id: s.assessment_id}) + |> Repo.all() formatted_submissions = Enum.map(submissions, fn submission -> From 80ec85f4ddb951b2937078442cf305d7f13fa8da Mon Sep 17 00:00:00 2001 From: GabrielCWT <77312579+GabrielCWT@users.noreply.github.com> Date: Sun, 25 Feb 2024 08:31:44 +0800 Subject: [PATCH 11/15] feat: Add respective course_id for each submission This is to prepare for implementing of the correct links in the avenger_backlog.html.eex --- lib/cadet/assessments/assessments.ex | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/cadet/assessments/assessments.ex b/lib/cadet/assessments/assessments.ex index de3138fae..49f2c6451 100644 --- a/lib/cadet/assessments/assessments.ex +++ b/lib/cadet/assessments/assessments.ex @@ -1589,17 +1589,18 @@ defmodule Cadet.Assessments do formatted_submissions = Enum.map(submissions, fn submission -> - student_name = + [student_course_id, student_name] = CourseRegistration |> join(:inner, [cr], u in assoc(cr, :user)) |> where([cr], cr.id == ^submission.student_id) - |> select([cr, u], u.name) + |> select([cr, u], [cr.course_id, u.name]) |> Repo.one() assessment_title = Repo.get(Assessment, submission.assessment_id).title %{ student_name: student_name, + student_course_id: student_course_id, assessment_title: assessment_title, submission_id: submission.id } From fa2c80a1331741651ced4355859d2ffee7cbe4ce Mon Sep 17 00:00:00 2001 From: GabrielCWT <77312579+GabrielCWT@users.noreply.github.com> Date: Sun, 25 Feb 2024 09:32:08 +0800 Subject: [PATCH 12/15] fix: Emails now send the correct submission url --- lib/cadet/email.ex | 1 + lib/cadet/workers/NotificationWorker.ex | 24 +++++++++++++++++++ .../email/assessment_submission.html.eex | 2 +- .../templates/email/avenger_backlog.html.eex | 2 +- 4 files changed, 27 insertions(+), 2 deletions(-) diff --git a/lib/cadet/email.ex b/lib/cadet/email.ex index b7ff08101..db7e0ee48 100644 --- a/lib/cadet/email.ex +++ b/lib/cadet/email.ex @@ -27,6 +27,7 @@ defmodule Cadet.Email do |> assign(:avenger_name, avenger.name) |> assign(:student_name, student.name) |> assign(:assessment_title, submission.assessment.title) + |> assign(:submission_url, submission.submission_url) |> subject("New submission for #{submission.assessment.title}") |> render("#{template_file_name}.html") end diff --git a/lib/cadet/workers/NotificationWorker.ex b/lib/cadet/workers/NotificationWorker.ex index c4576ffc1..6ff19aa3d 100644 --- a/lib/cadet/workers/NotificationWorker.ex +++ b/lib/cadet/workers/NotificationWorker.ex @@ -35,6 +35,11 @@ defmodule Cadet.Workers.NotificationWorker do end end + # TODO update this to use frontend url + defp build_submission_url(course_id, submission_id) do + "https://sourceacademy.org/courses/#{course_id}/grading/#{submission_id}" + end + # Returns true if user preference matches the job's time option. # If user has made no preference, the default time option is used instead def is_user_time_option_matched( @@ -81,6 +86,18 @@ defmodule Cadet.Workers.NotificationWorker do else IO.puts("[AVENGER_BACKLOG] SENDING_OUT") + ungraded_submissions = + Enum.map(ungraded_submissions, fn submission -> + Map.put( + submission, + :submission_url, + build_submission_url( + submission[:student_course_id], + submission[:submission_id] + ) + ) + end) + email = Email.avenger_backlog_email( ntype.template_file_name, @@ -135,6 +152,13 @@ defmodule Cadet.Workers.NotificationWorker do true -> IO.puts("[ASSESSMENT_SUBMISSION] SENDING_OUT") + submission = + Map.put( + submission, + :submission_url, + build_submission_url(course_id, submission_id) + ) + email = Email.assessment_submission_email( notification_type.template_file_name, diff --git a/lib/cadet_web/templates/email/assessment_submission.html.eex b/lib/cadet_web/templates/email/assessment_submission.html.eex index 240c72dcd..cbe7ac0df 100644 --- a/lib/cadet_web/templates/email/assessment_submission.html.eex +++ b/lib/cadet_web/templates/email/assessment_submission.html.eex @@ -1,5 +1,5 @@Dear <%= @avenger_name %>,
-There is a new submission by <%= @student_name %> for <%= @assessment_title %>. Please Review and grade the submission
+There is a new submission by <%= @student_name %> for <%= @assessment_title %>. Please Review and grade the submission.
Unsubscribe from this email topic. diff --git a/lib/cadet_web/templates/email/avenger_backlog.html.eex b/lib/cadet_web/templates/email/avenger_backlog.html.eex index 6440434f8..094619143 100644 --- a/lib/cadet_web/templates/email/avenger_backlog.html.eex +++ b/lib/cadet_web/templates/email/avenger_backlog.html.eex @@ -3,7 +3,7 @@ You have ungraded submissions. Please review and grade the following submissions as soon as possible. <%= for s <- @submissions do %> -<%= s[:assessment_title] %> by <%= s[:student_name] %>
+<%= s[:assessment_title] %> by <%= s[:student_name] %>
<% end %> Unsubscribe from this email topic. From f37155adde6c158da9bad57ea9ec92345fb05385 Mon Sep 17 00:00:00 2001 From: GabrielCWT <77312579+GabrielCWT@users.noreply.github.com> Date: Sun, 25 Feb 2024 10:04:56 +0800 Subject: [PATCH 13/15] refactor: Move submission url building to email builders --- lib/cadet/email.ex | 26 +++++++++++++++++++++++-- lib/cadet/workers/NotificationWorker.ex | 24 ----------------------- 2 files changed, 24 insertions(+), 26 deletions(-) diff --git a/lib/cadet/email.ex b/lib/cadet/email.ex index db7e0ee48..338f36c9a 100644 --- a/lib/cadet/email.ex +++ b/lib/cadet/email.ex @@ -9,6 +9,17 @@ defmodule Cadet.Email do if is_nil(avenger.email) do nil else + ungraded_submissions = + Enum.map(ungraded_submissions, fn submission -> + Map.put( + submission, + :submission_url, + build_submission_url( + submission[:student_course_id], + submission[:submission_id] + ) + ) + end) base_email() |> to(avenger.email) |> assign(:avenger_name, avenger.name) @@ -22,12 +33,18 @@ defmodule Cadet.Email do if is_nil(avenger.email) do nil else + submission = + Map.put( + submission, + :submission_url, + build_submission_url(submission.assessment.course_id, submission.id) + ) + base_email() |> to(avenger.email) |> assign(:avenger_name, avenger.name) |> assign(:student_name, student.name) - |> assign(:assessment_title, submission.assessment.title) - |> assign(:submission_url, submission.submission_url) + |> assign(:submission, submission) |> subject("New submission for #{submission.assessment.title}") |> render("#{template_file_name}.html") end @@ -38,4 +55,9 @@ defmodule Cadet.Email do |> from("noreply@sourceacademy.org") |> put_html_layout({CadetWeb.LayoutView, "email.html"}) end + + # TODO update this to use frontend url + defp build_submission_url(course_id, submission_id) do + "https://sourceacademy.org/courses/#{course_id}/grading/#{submission_id}" + end end diff --git a/lib/cadet/workers/NotificationWorker.ex b/lib/cadet/workers/NotificationWorker.ex index 6ff19aa3d..c4576ffc1 100644 --- a/lib/cadet/workers/NotificationWorker.ex +++ b/lib/cadet/workers/NotificationWorker.ex @@ -35,11 +35,6 @@ defmodule Cadet.Workers.NotificationWorker do end end - # TODO update this to use frontend url - defp build_submission_url(course_id, submission_id) do - "https://sourceacademy.org/courses/#{course_id}/grading/#{submission_id}" - end - # Returns true if user preference matches the job's time option. # If user has made no preference, the default time option is used instead def is_user_time_option_matched( @@ -86,18 +81,6 @@ defmodule Cadet.Workers.NotificationWorker do else IO.puts("[AVENGER_BACKLOG] SENDING_OUT") - ungraded_submissions = - Enum.map(ungraded_submissions, fn submission -> - Map.put( - submission, - :submission_url, - build_submission_url( - submission[:student_course_id], - submission[:submission_id] - ) - ) - end) - email = Email.avenger_backlog_email( ntype.template_file_name, @@ -152,13 +135,6 @@ defmodule Cadet.Workers.NotificationWorker do true -> IO.puts("[ASSESSMENT_SUBMISSION] SENDING_OUT") - submission = - Map.put( - submission, - :submission_url, - build_submission_url(course_id, submission_id) - ) - email = Email.assessment_submission_email( notification_type.template_file_name, From 478298481347f74ece446493837062ac24cd78c8 Mon Sep 17 00:00:00 2001 From: GabrielCWT <77312579+GabrielCWT@users.noreply.github.com> Date: Sun, 25 Feb 2024 10:05:48 +0800 Subject: [PATCH 14/15] refactor: Change variables to follow new format --- lib/cadet_web/templates/email/assessment_submission.html.eex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/cadet_web/templates/email/assessment_submission.html.eex b/lib/cadet_web/templates/email/assessment_submission.html.eex index cbe7ac0df..21ecb7791 100644 --- a/lib/cadet_web/templates/email/assessment_submission.html.eex +++ b/lib/cadet_web/templates/email/assessment_submission.html.eex @@ -1,5 +1,5 @@Dear <%= @avenger_name %>,
-There is a new submission by <%= @student_name %> for <%= @assessment_title %>. Please Review and grade the submission.
+There is a new submission by <%= @student_name %> for <%= @submission.assessment.title %>. Please Review and grade the submission.
Unsubscribe from this email topic. From 2095250c9a51643f24e134df8347007b5902ba3e Mon Sep 17 00:00:00 2001 From: GabrielCWT <77312579+GabrielCWT@users.noreply.github.com> Date: Sun, 25 Feb 2024 10:06:04 +0800 Subject: [PATCH 15/15] refactor: Format --- lib/cadet/email.ex | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/cadet/email.ex b/lib/cadet/email.ex index 338f36c9a..18a6ff357 100644 --- a/lib/cadet/email.ex +++ b/lib/cadet/email.ex @@ -20,6 +20,7 @@ defmodule Cadet.Email do ) ) end) + base_email() |> to(avenger.email) |> assign(:avenger_name, avenger.name) @@ -56,8 +57,8 @@ defmodule Cadet.Email do |> put_html_layout({CadetWeb.LayoutView, "email.html"}) end - # TODO update this to use frontend url - defp build_submission_url(course_id, submission_id) do - "https://sourceacademy.org/courses/#{course_id}/grading/#{submission_id}" - end + # TODO update this to use frontend url + defp build_submission_url(course_id, submission_id) do + "https://sourceacademy.org/courses/#{course_id}/grading/#{submission_id}" + end end