Exemple #1
0
        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 }));
        }