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()); }
public AssignmentTask MapTaskUpdateRequest(AssignmentTaskUpdateRequest task) { return(new AssignmentTask { Id = task.Id, AssignmentId = task.AssignmentId, Name = task.Name, Description = task.Description }); }