Пример #1
0
        public async Task <ActionResult <StudentAssignedTaskDTO> > GetStudentAssignedTask(Guid assignmentId)
        {
            if (!User.Identity.IsAuthenticated)
            {
                return(Challenge());
            }

            var studentId = userManager.GetUserId(User);

            var studentTask = await _context.StudentAssignedTasks
                              .Where(sat => sat.StudentId == studentId && sat.Task.AssignmentId == assignmentId)
                              .Select(sat => new StudentTaskProjection {
                Id           = sat.Id,
                Task         = sat.Task,
                StudentId    = sat.StudentId,
                Student      = sat.Student,
                CourseId     = sat.Task.Assignment.Course.Id,
                State        = sat.State,
                Review       = sat.Review,
                FinalGrading = sat.FinalGrading,
                Submissions  = sat.Submissions
            })
                              .FirstOrDefaultAsync();

            if (studentTask is null)
            {
                return(NotFound());
            }

            var authorization = await authorizationService.AuthorizeAsync(User, studentTask, AuthorizationConstants.CanViewStudentTaskPolicy);

            if (!authorization.Succeeded)
            {
                return(Forbid());
            }

            await _context.Entry(studentTask.Student)
            .Reference(t => t.User)
            .LoadAsync();

            await _context.TaskSubmissions
            .Where(t => studentTask.Submissions.Contains(t))
            .Include(s => s.Files).ThenInclude(f => f.File)
            .ToListAsync();

            return(await taskMapper.MapStudentAssignedTask(studentTask));
        }