/// <summary> /// /// </summary> /// <param name="filter"></param> /// <param name="tree"></param> private void SearchFolders(DashboardSearchFilter filter, SearchTree tree, ModelTeams teams) { var shouldReturn = (null != filter.FolderIds && !filter.FolderIds.Contains(0)) || (filter.Starred) || (filter.HasTags) || (filter.HasDashboardIds); if (shouldReturn) { return; } var request = DataContext .Folders .ForActiveOrg() .Include(x => x.Permissions) .AsQueryable(); if (!string.IsNullOrEmpty(filter.Query)) { request = request .Where(x => x.Title.ToLower().Contains(filter.Query.ToLower())); } var folders = request.ToList(); tree.Folders = folders .Where(x => CheckViewPermission(x, teams)) .Select(x => x.ToModel()) .ToList(); }
/// <summary> /// /// </summary> /// <param name="filter"></param> /// <returns></returns> public OperationResult <SearchTree> Search(DashboardSearchFilter filter) { //return OperationResult<SearchTree>.Create( ErrorCode.BadGetDashboards); var tree = new SearchTree(); OperationResult <SearchTree> res = null; try { var teams = new UserRepository(DataContext) .ForActiveOrg(DataContext.ActiveOrgId) .GetUserTeams(DataContext.ActiveUserId) .Value ?? new ModelTeams(); SearchDashboards(filter, tree, teams); SearchFolders(filter, tree, teams); res = OperationResult <SearchTree> .Create(tree); } catch //( Exception ) { //res = OperationResult<ModelDashboards>.Create( ErrorCode.BadGetDashboards, e ); } return(res); }
/// <summary> /// /// </summary> /// <param name="filter"></param> /// <param name="tree"></param> private void SearchDashboards(DashboardSearchFilter filter, SearchTree tree, ModelTeams teams) { var request = DataContext .Dashboards .ForActiveOrg() .AsQueryable(); if (filter.HasFolderIds) { request = request.Where(d => (null == d.FolderId && filter.FolderIds.Contains(0)) ? true : (null != d.FolderId && filter.FolderIds.Contains(d.FolderId.Value))); } if (!string.IsNullOrEmpty(filter.Query)) { request = request .Where(x => x.Title.ToLower().Contains(filter.Query.ToLower())); } if (filter.Starred) { request = request .Where(x => x.Stars.Any(y => y.UserId == filter.UserId)); } if (filter.HasDashboardIds) { request = request .Where(x => filter.DashboardIds.Contains(x.Id)); } var dashboards = request .Include(x => x.Folder) .ThenInclude(x => x.Permissions) .Include(x => x.Tags) .Include(x => x.Stars) .Include(x => x.Permissions) .ToList() .Where(x => CheckViewPermission(x, teams)) .Select(x => x .ToModel() .AddVersion(DataContext.Entry(x))) .ToList(); if (filter.HasTags) { Func <ModelDashboard, bool> tagPred = x => (filter.TagOperator == SearchOperator.And) ? filter.Tags.Intersect(x.Tags).Count() == filter.Tags.Count() : x.Tags.Intersect(filter.Tags).Count() > 0; dashboards = dashboards .Where(tagPred) .ToList(); } tree.Dashboards = dashboards; }