Ejemplo n.º 1
0
        /// <summary>
        /// Returns the results for all assignments, for a given student.
        /// </summary>
        public async Task <StudentAssignmentResults> GetStudentAssignmentResultsAsync(
            string classroomName,
            int userId,
            bool admin)
        {
            var classroom = await LoadClassroomAsync(classroomName);

            var user = await _dbContext.Users
                       .Where(u => u.Id == userId)
                       .SingleOrDefaultAsync();

            var section = await _dbContext
                          .SectionMemberships
                          .Where
                          (
                sm => sm.ClassroomMembership.UserId == userId &&
                sm.ClassroomMembership.Role != ClassroomRole.Admin &&
                sm.ClassroomMembership.ClassroomId == classroom.Id &&
                sm.Role == SectionRole.Student
                          )
                          .Select(sm => sm.Section)
                          .FirstOrDefaultAsync();

            if (section == null && !admin)
            {
                return(null);
            }

            var assignments = await GetAssignmentsAsync
                              (
                classroomName,
                section?.Name,
                groupName : null,
                admin : admin
                              );

            var submissions = await GetUserQuestionSubmissionsAsync
                              (
                classroom.Id,
                section?.Id,
                null /*assignmentGroupName*/,
                userId
                              );

            return(_studentAssignmentReportGenerator.GetStudentAssignmentGroupResults
                   (
                       user,
                       section,
                       assignments,
                       submissions,
                       admin
                   ));
        }