示例#1
0
        /// <summary>
        /// Takes a set of filters expressed as filter UIDs and combination roles and produces a JSON encoded filter
        /// representing the combined filters
        /// </summary>
        /// <param name="request"></param>
        /// <param name="repository"></param>
        /// <param name="serviceExceptionHandler"></param>
        /// <param name="log"></param>
        /// <returns></returns>
        public static async Task <string> Combine(FilterRequestFull request, IFilterRepository repository, IServiceExceptionHandler serviceExceptionHandler, ILogger log)
        {
            var filters =
                (await repository.GetFiltersForProjectUser(request.CustomerUid, request.ProjectUid, request.UserId, true).ConfigureAwait(false))
                .Where(x => request.HierarchicFilterUids.Any(f => string.Equals(f.FilterUid, x.FilterUid, StringComparison.OrdinalIgnoreCase)))
                .ToList();

            if (filters.Count != request.HierarchicFilterUids.Count)
            {
                serviceExceptionHandler.ThrowServiceException(HttpStatusCode.BadRequest, 11);
            }

            log.LogDebug($"CombineFilters retrieved {request.HierarchicFilterUids.Count} requested filters to combine");

            // Perform the operations to combine the selected filters
            return(JsonConvert.SerializeObject(CombineFilters(request, filters)));
        }