public async Task <BugResponse> Handle(AddProjectBugRequest request) { var project = await _projectRepository.ReadById(request.ProjectId); if (project == default) { throw new ArgumentNullException("Project not found"); } if (!Enum.IsDefined(typeof(BugPriority), request.Priority.ToUpper())) { throw new ArgumentOutOfRangeException("Bug priority has wrong value"); } var priority = Enum.Parse <BugPriority>(request.Priority.ToUpper()); var bug = new Bug(request.Title, BugStatus.OPEN, priority, request.DueDate); bug.UpdateDescriptionTo(request.Description); long assignee = request.Assignee; if (request.Assignee == 0) // Should auto assign { assignee = await _bugAutoAssigner.Propose(project, request.Tags); } project.CreateAndAssignBug(bug, assignee); await _projectRepository.PersistChanges(); return(bug.Adapt <BugResponse>()); }
public async Task <IActionResult> AddProjectBug([FromForm, Bind("ProjectId,Priority,Title,DueDate,Description,Assignee,SelectedTags")] AddProjectBugViewModel model) { if (!ModelState.IsValid) { var readProjectRequest = new ReadProjectRequest { ProjectId = model.ProjectId.Value }; var foundProject = await _projectApplicationService.Handle(readProjectRequest); var readAvailableTagsRequest = new ReadTagsRequest(); var availableTags = await _tagApplicationService.Handle(readAvailableTagsRequest); model.TeamMembers = foundProject.TeamMembers .Select(user => new SelectListItem { Value = user.Id.ToString(), Text = user.FullName }) .ToList(); model.AvailableTags = availableTags .Select(tag => new SelectListItem { Value = tag.Id.ToString(), Text = tag.Name }) .ToList(); return(View(model)); } var addProjectBugRequest = new AddProjectBugRequest { ProjectId = model.ProjectId.Value, Priority = model.Priority, Title = model.Title, DueDate = model.DueDate.Value, Description = model.Description, Assignee = model.Assignee.Value, Tags = model.SelectedTags }; await _projectApplicationService.Handle(addProjectBugRequest); return(RedirectToAction(nameof(Details), new { projectId = model.ProjectId.Value })); }