示例#1
0
        public async Task <IActionResult> PutTask(Guid id, AssignmentTaskUpdateRequest taskRequest)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != taskRequest.Id)
            {
                return(BadRequest());
            }

            var assignmentTask = taskMapper.MapTaskUpdateRequest(taskRequest);

            _context.Entry(assignmentTask).State = EntityState.Modified;

            var assignment = await _context.Assignments.FindAsync(assignmentTask.AssignmentId);

            if (assignment.Type == AssignmentType.CustomAssignedTasks)
            {
                var prevAssignedStudents = await _context.StudentAssignedTasks.Where(sat => sat.TaskId == assignmentTask.Id).ToListAsync();

                if (prevAssignedStudents.Any())
                {
                    _context.StudentAssignedTasks.RemoveRange(prevAssignedStudents.Where(s => s.StudentId != taskRequest.AssignedTo));
                }

                if (!string.IsNullOrWhiteSpace(taskRequest.AssignedTo) && !prevAssignedStudents.Any(s => s.StudentId == taskRequest.AssignedTo))
                {
                    var studentUser = await _context.Students.FirstOrDefaultAsync(s => s.UserId == taskRequest.AssignedTo);

                    if (studentUser is null)
                    {
                        ModelState.AddModelError("assignedTo", "The selected student to be assigned could not be found.");
                        return(BadRequest(ModelState));
                    }

                    assignmentTask.StudentsAssigned.Add(new StudentAssignedTask {
                        State     = StudentAssignedTaskState.Assigned,
                        Task      = assignmentTask,
                        StudentId = taskRequest.AssignedTo
                    });
                }
            }

            try {
                await _context.SaveChangesAsync();
            } catch (DbUpdateConcurrencyException) {
                if (!TaskExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
示例#2
0
 public AssignmentTask MapTaskUpdateRequest(AssignmentTaskUpdateRequest task)
 {
     return(new AssignmentTask {
         Id = task.Id,
         AssignmentId = task.AssignmentId,
         Name = task.Name,
         Description = task.Description
     });
 }