/// <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))); }