public string Execute(IList <string> inputParameters) { string bugTitle = inputParameters[0]; string teamToAddBugFor = inputParameters[1]; string boardToAddBugFor = inputParameters[2]; string bugPriority = inputParameters[3]; string bugSeverity = inputParameters[4]; string bugAssignee = inputParameters[5]; IList <string> bugStepsToReproduce = stepsToReproduceBuilder.BuildStepsToReproduce(inputParameters, "!Steps"); var bugDescription = descriptionBuilder.BuildDescription(inputParameters, "!Steps"); //Validations var bugTypeForChecking = "Bug Title"; inputValidator.IsNullOrEmpty(bugTitle, bugTypeForChecking); var teamTypeForChecking = "Team Name"; inputValidator.IsNullOrEmpty(teamToAddBugFor, teamTypeForChecking); var boardTypeForChecking = "Board Name"; inputValidator.IsNullOrEmpty(boardToAddBugFor, boardTypeForChecking); inputValidator.ValdateItemTitleLength(bugTitle); inputValidator.ValdateItemDescriptionLength(bugDescription); businessLogicValidator.ValidateTeamExistance(allTeams, teamToAddBugFor); businessLogicValidator.ValidateMemberExistance(allMembers, bugAssignee); businessLogicValidator.ValidateIfMemberNotInTeam(allTeams, teamToAddBugFor, bugAssignee); businessLogicValidator.ValidateBugExistanceInBoard(allTeams, boardToAddBugFor, teamToAddBugFor, bugTitle); //Operations var isPriorityEnumConvertable = Enum.TryParse(bugPriority, out Priority bugPriorityEnum); inputValidator.IsEnumConvertable(isPriorityEnumConvertable, "Priority"); var isSeverityEnumConvertable = Enum.TryParse(bugSeverity, out Severity bugSeverityEnum); inputValidator.IsEnumConvertable(isSeverityEnumConvertable, "Severity"); IBug bugToAddToCollection = this.factory.CreateBug(bugTitle, bugPriorityEnum, bugSeverityEnum, allMembers.AllMembersList[bugAssignee], bugStepsToReproduce, bugDescription); var indexOfBoardInSelectedTeam = allTeams.AllTeamsList[teamToAddBugFor].Boards.FindIndex(boardIndex => boardIndex.Name == boardToAddBugFor); boardOperations.AddWorkitemToBoard(allTeams.AllTeamsList[teamToAddBugFor].Boards[indexOfBoardInSelectedTeam], bugToAddToCollection); var memberToTrackActivityFor = allTeams.AllTeamsList[teamToAddBugFor].Members.First(member => member.Name == bugAssignee); memberOpertaions.AddWorkItemIdToMember(memberToTrackActivityFor, bugToAddToCollection.Id); var boardToPutHistoryFor = allTeams.AllTeamsList[teamToAddBugFor].Boards[indexOfBoardInSelectedTeam]; var teamToPutHistoryFor = allTeams.AllTeamsList[teamToAddBugFor]; boardOperations.AddActivityHistoryToBoard(allTeams.AllTeamsList[teamToAddBugFor].Boards[indexOfBoardInSelectedTeam], memberToTrackActivityFor, bugToAddToCollection); memberOpertaions.AddActivityHistoryToMember(memberToTrackActivityFor, bugToAddToCollection, teamToPutHistoryFor, boardToPutHistoryFor); return(string.Format(BugCreated, bugTitle)); }