public async Task <IEnumerable <ISiteMapResource> > GetResourcesAsync() { var userContext = await _userContextService.GetCurrentContextAsync(); var resources = new List <SiteMapResource>(); if (!_permissionValidationService.HasPermission <PageReadPermission>(userContext)) { return(resources); } var pageRoutes = await _queryExecutor.ExecuteAsync(new GetAllPageRoutesQuery()); var allRules = await _queryExecutor.ExecuteAsync(new GetAllCustomEntityRoutingRulesQuery()); foreach (var pageRoute in pageRoutes.Where(p => p.IsPublished() && p.ShowInSiteMap)) { if (pageRoute.PageType == PageType.CustomEntityDetails) { if (_permissionValidationService.HasCustomEntityPermission <CustomEntityReadPermission>(pageRoute.CustomEntityDefinitionCode, userContext)) { var routesQuery = new GetCustomEntityRoutesByDefinitionCodeQuery(pageRoute.CustomEntityDefinitionCode); var allCustomEntityRoutes = await _queryExecutor.ExecuteAsync(routesQuery); var pageLocaleId = pageRoute.Locale != null ? pageRoute.Locale.LocaleId : (int?)null; foreach (var customEntityRoute in allCustomEntityRoutes .Where(r => r.Locale == null ? !pageLocaleId.HasValue : r.Locale.LocaleId == pageLocaleId)) { var resource = MapCustomEntityResource(pageRoute, customEntityRoute, allRules); if (resource != null) { resources.Add(resource); } } } } else { resources.Add(MapPageResource(pageRoute)); } } return(resources); }
public async Task <ICollection <CustomEntityRoute> > ExecuteAsync(GetCustomEntityRoutesByDefinitionCodeQuery query, IExecutionContext executionContext) { return(await _customEntityCache.GetOrAddAsync(query.CustomEntityDefinitionCode, async() => { var dbRoutes = await _dbContext .CustomEntities .Include(c => c.CustomEntityVersions) .Include(c => c.Locale) .AsNoTracking() .Where(e => e.CustomEntityDefinitionCode == query.CustomEntityDefinitionCode && (e.LocaleId == null || e.Locale.IsActive)) .ToListAsync(); var allLocales = await _queryExecutor.ExecuteAsync(new GetAllActiveLocalesQuery(), executionContext); var localesLookup = allLocales.ToDictionary(l => l.LocaleId); return await MapRoutesAsync(query, dbRoutes, localesLookup);; })); }
private async Task <ICollection <CustomEntityRoute> > MapRoutesAsync( GetCustomEntityRoutesByDefinitionCodeQuery query, List <CustomEntity> dbEntities, Dictionary <int, ActiveLocale> allLocales ) { var definition = _customEntityDefinitionRepository.GetRequiredByCode(query.CustomEntityDefinitionCode); var routes = dbEntities .Select(r => MapRoute(r, allLocales)) .ToList(); // Map additional parameters await(Task) _mapAdditionalRouteDataAsyncMethod .MakeGenericMethod(definition.GetType(), definition.GetDataModelType()) .Invoke(this, new object[] { definition, routes, dbEntities }); return(routes); }
public IDomainRepositoryQueryContext <ICollection <CustomEntityRoute> > AsRoutes() { var query = new GetCustomEntityRoutesByDefinitionCodeQuery(_customEntityDefinitionCode); return(DomainRepositoryQueryContextFactory.Create(query, ExtendableContentRepository)); }