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>()); }