Esempio n. 1
0
        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
            }));
        }