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 }));
        }
Example #2
0
        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>());
        }