Ejemplo n.º 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>());
        }