public async Task <WorkItemListApiResponse> GetWorkItemList( DateTime?asOf = null, IEnumerable <string> fields = null, params long[] workItemIds) { if (!workItemIds.Any()) { return new WorkItemListApiResponse { Value = new List <WorkItemApiResponse>(0) } } ; var fieldsList = fields?.ToList() ?? new List <string>(0); var pagedWorkItemIds = GetPagedWorkItemIds(workItemIds).ToList(); var tasks = pagedWorkItemIds.Select(async x => await GetWorkItemListInternal(asOf, fieldsList, x)).ToList(); await Task.WhenAll(tasks); var results = tasks.Select(x => x.Result).ToList(); var model = new WorkItemListApiResponse(); var values = results.SelectMany(x => x.Value).ToList(); model.Value = new ReadOnlyCollection <WorkItemApiResponse>(values); return(model); }
public Iteration( WorkItemListApiResponse workItems, IReadOnlyCollection <TeamMemberApiResponse> teamMembers, IterationApiResponse iteration, IterationCapacityListApiResponse capacities, bool isBacklog) { if (workItems == null) { throw new ArgumentNullException(nameof(workItems)); } if (teamMembers == null) { throw new ArgumentNullException(nameof(teamMembers)); } if (iteration == null) { throw new ArgumentNullException(nameof(iteration)); } IsBacklog = isBacklog; IterationId = iteration.Id; IterationName = iteration.Name; IterationPath = iteration.Path; IterationStartDate = iteration.Attributes?.StartDate; IterationFinishDate = iteration.Attributes?.FinishDate; IterationDayCount = IterationStartDate != null && IterationFinishDate != null ? (IterationFinishDate.Value - IterationStartDate.Value) .TotalDays + 1 : 0; var items = workItems.Value.Select(x => new WorkItem(x, teamMembers)) .OrderBy(x => x.BacklogPriority) .ToList(); foreach (var item in items) { var parent = item.ParentId > 0 ? items.FirstOrDefault(x => x.Id == item.ParentId) : null; if (parent != null) { parent.ChildItems.Add(item); } else { Items.Add(item); } } //this.Items = this.Items.Where(x => x.IsTypeProductBacklogItem || x.IsTypeBug || x.IsTypeTask).ToList(); Items = Items.OrderByDescending(x => x.BacklogPriority > 0).ThenBy(x => x.BacklogPriority).ToList(); Items.ToList().ForEach(x => x.IsTopLevel = true); if (capacities != null) { var groupedCapacities = from capacity in capacities.Value //from activity in capacity.Activities //from daysOff in capacity.DaysOff group capacity by capacity.TeamMember.Id into g select new { TeamMember = g.Select(x => x.TeamMember).First(), Activities = g.SelectMany(x => x.Activities), DaysOff = g.SelectMany(x => x.DaysOff) }; Capacities = groupedCapacities.Select(x => new Capacity(x.TeamMember, x.Activities, x.DaysOff)) .ToList(); } }