public async Task <IActionResult> UpdateProjectBug([FromForm, Bind("ProjectId,BugId,Assignee,Title,Description,Priority,DueDate,Status")] UpdateProjectBugViewModel model) { if (!ModelState.IsValid) { var readProjectRequest = new ReadProjectRequest { ProjectId = model.ProjectId.Value }; var foundProject = await _projectApplicationService.Handle(readProjectRequest); model.TeamMembers = foundProject.TeamMembers .Select(user => new SelectListItem { Value = user.Id.ToString(), Text = user.FullName }) .ToList(); return(RedirectToAction(nameof(Details), new { projectId = model.ProjectId.Value })); } var updateProjectBugRequest = new UpdateProjectBugRequest { ProjectId = model.ProjectId.Value, BugId = model.BugId.Value, DueDate = model.DueDate.Value, Description = model.Description, Title = model.Title, Priority = model.Priority, Status = model.Status, Assignee = model.Assignee.Value }; await _projectApplicationService.Handle(updateProjectBugRequest); return(RedirectToAction(nameof(Details), new { projectId = model.ProjectId.Value })); }
public async Task <BugResponse> Handle(UpdateProjectBugRequest request) { if (!Enum.IsDefined(typeof(BugPriority), request.Priority.ToUpper())) { throw new ArgumentOutOfRangeException("Bug priority has wrong value"); } if (!Enum.IsDefined(typeof(BugStatus), request.Status.ToUpper())) { throw new ArgumentOutOfRangeException("Bug status has wrong value"); } var priority = Enum.Parse <BugPriority>(request.Priority.ToUpper()); var status = Enum.Parse <BugStatus>(request.Status.ToUpper()); var project = await _projectRepository.ReadById(request.ProjectId); if (project == default) { throw new ArgumentNullException("Project not found"); } var bug = project.Bugs.SingleOrDefault(bug => bug.Id == request.BugId); if (bug == default) { throw new ArgumentNullException("Bug for this project not found"); } var assignedTeamMember = project.TeamMembers.FirstOrDefault(user => user.Id == request.Assignee); bug.AssignTo(assignedTeamMember); bug.UpdateTitleTo(request.Title); bug.UpdateDescriptionTo(request.Description); bug.UpdateStatusTo(status); bug.UpdatePriorityTo(priority); bug.UpdateDueDateTo(request.DueDate); await _projectRepository.PersistChanges(); return(bug.Adapt <BugResponse>()); }