public async Task <IResponse <IEnumerable <IWorkItem> > > GetWorkItemsAsync(WorkItemQueryModel query) { try { var settingsResponse = await _settingsService.GetSettings(); if (!settingsResponse.Success) { return(Response <IEnumerable <IWorkItem> > .FromFailure(settingsResponse.Message)); } var settings = settingsResponse.Value; var sb = new StringBuilder(); sb.Append($"SELECT [System.Id] FROM workitems WHERE [System.AssignedTo] contains '{settings.TfsUserName}'"); foreach (var expression in query.Expressions.Where(p => p.Field != null)) { sb.Append(" AND "); sb.Append($"[{expression.Field}] "); sb.Append($"{VstsHelpers.GetExpressionOperatorString(expression.Operator)} "); if (expression.Operator == WorkItemQueryExpressionOperator.In) { var valueSb = new StringBuilder(); valueSb.Append("("); foreach (var value in expression.Values) { valueSb.Append($"'{value.Value}', "); } sb.Append($"{valueSb.ToString().TrimEnd(',', ' ')})"); } else { sb.Append($"'{expression.Value}'"); } } var wiql = sb.ToString(); var queryBody = JsonConvert.SerializeObject(new { query = wiql }); var queryResponse = await SendRequestAsync(HttpMethod.Post, "_apis/wit/wiql?api-version=5.0", queryBody); if (!queryResponse.Success) { return(Response <IEnumerable <IWorkItem> > .FromFailure(queryResponse.Message)); } var dto = JsonConvert.DeserializeObject <WiqlQueryResultDto>(queryResponse.Value); if (dto.WorkItems.Count == 0) { return(Response <IEnumerable <IWorkItem> > .FromSuccess(new List <IWorkItem>())); } if (dto.WorkItems.Count > 200) { dto.WorkItems = dto.WorkItems.Take(200).ToList(); } var batchRequest = JsonConvert.SerializeObject(new { expand = "Relations", ids = dto.WorkItems.Select(wi => wi.Id) }); batchRequest = batchRequest.Replace("expand", "$expand"); var batchResponse = await SendRequestAsync(HttpMethod.Post, "_apis/wit/workitemsbatch?api-version=5.0", batchRequest); if (!batchResponse.Success) { return(Response <IEnumerable <IWorkItem> > .FromFailure(batchResponse.Message)); } var batchResponseDto = JsonConvert.DeserializeObject <VstsCollectionDto <WorkItemApiResultDto> >(batchResponse.Value); var result = new List <IWorkItem>(); foreach (var workItem in batchResponseDto.Value) { result.Add(_mapper.Map <WorkItemModel>(workItem)); } return(Response <IEnumerable <IWorkItem> > .FromSuccess(result)); } catch (Exception ex) { return(Response <IEnumerable <IWorkItem> > .FromException($"An error occurred getting the requested work items", ex)); } }
public WorkItemQueryStepViewModel(WorkItemQueryModel model, IVstsService vstsService, ITelemetryService telemetryService) { _vstsService = vstsService ?? throw new ArgumentNullException(nameof(vstsService)); _telemetryService = telemetryService ?? throw new ArgumentNullException(nameof(telemetryService)); Model = model ?? throw new ArgumentNullException(nameof(model)); }