@@ -8,7 +8,9 @@ defmodule Cadet.Autograder.Utilities do
88
99 import Ecto.Query
1010
11- alias Cadet.Accounts.CourseRegistration
11+ alias Cadet.Accounts . { CourseRegistration , TeamMember }
12+
13+ alias Cadet.Assessments
1214 alias Cadet.Assessments . { Answer , Assessment , Question , Submission }
1315
1416 def dispatch_programming_answer ( answer = % Answer { } , question = % Question { } , overwrite \\ false ) do
@@ -25,7 +27,37 @@ defmodule Cadet.Autograder.Utilities do
2527 } )
2628 end
2729
28- def fetch_submissions ( assessment_id , course_id ) when is_ecto_id ( assessment_id ) do
30+ def fetch_submissions ( assessment_id , course_id )
31+ when is_ecto_id ( assessment_id ) and is_ecto_id ( course_id ) do
32+ if Assessments . is_team_assessment? ( assessment_id ) do
33+ fetch_team_submissions ( assessment_id , course_id )
34+ else
35+ fetch_student_submissions ( assessment_id , course_id )
36+ end
37+ end
38+
39+ defp fetch_team_submissions ( assessment_id , course_id )
40+ when is_ecto_id ( assessment_id ) and is_ecto_id ( course_id ) do
41+ CourseRegistration
42+ |> where ( role: "student" , course_id: ^ course_id )
43+ |> join (
44+ :left ,
45+ [ cr ] ,
46+ tm in TeamMember ,
47+ on: cr . id == tm . student_id
48+ )
49+ |> join (
50+ :left ,
51+ [ cr , tm ] ,
52+ s in Submission ,
53+ on: tm . team_id == s . team_id and s . assessment_id == ^ assessment_id
54+ )
55+ |> select ( [ cr , tm , s ] , % { student_id: cr . id , submission: s } )
56+ |> Repo . all ( )
57+ end
58+
59+ defp fetch_student_submissions ( assessment_id , course_id )
60+ when is_ecto_id ( assessment_id ) and is_ecto_id ( course_id ) do
2961 CourseRegistration
3062 |> where ( role: "student" , course_id: ^ course_id )
3163 |> join (
0 commit comments