public async Task <IActionResult> Run( [HttpTrigger(AuthorizationLevel.Function, "get", Route = "interventions")] [RequestBodyType(typeof(ListInterventionsFilterRequest), "ListInterventionsFilterRequest")] ListInterventionsFilterRequest filter, [Table(Config.InterventionsTableName, Connection = Config.StorageConnectionName)] CloudTable cloudTable, ILogger log) { string finalFilter = InterventionFilterBuilder.GetInterventionListViewFilter(filter); TableContinuationToken token = null; var entities = new List <InterventionListItemResponse>(); do { var queryResult = await cloudTable.ExecuteQuerySegmentedAsync(new TableQuery <InterventionEntity>().Where( finalFilter), token); entities.AddRange(queryResult.Results.Select(x => _mapper.Map <InterventionListItemResponse>(x))); token = queryResult.ContinuationToken; } while (token != null); var sortedEntities = filter.SortDirection == (int)SortDirection.Descending ? entities.AsQueryable().OrderByDescending(filter.SortBy ?? "CreationDate") : entities.AsQueryable().OrderBy(filter.SortBy ?? "CreationDate"); var pagedEntities = sortedEntities.Skip((filter.Page - 1) * filter.PageSize).Take(filter.PageSize); return(new JsonResult(pagedEntities)); }
public async Task <IActionResult> Run( [HttpTrigger(AuthorizationLevel.Function, "get", Route = "interventions")] HttpRequest request, [Table(Config.InterventionsTableName, Connection = Config.StorageConnectionName)] CloudTable interventionsTable, ILogger log) { ListInterventionsFilterRequest requestParams = new ListInterventionsFilterRequest(request.Query); string filter = InterventionFilterBuilder.GetInterventionListViewFilter(requestParams); List <InterventionListItemResponse> interventions = await GetInterventions(interventionsTable, filter); IQueryable <InterventionListItemResponse> pagedInterventions = SortAndPaginateInterventions(interventions, requestParams); return(new JsonResult(new { totalCount = interventions.Count(), results = pagedInterventions })); }