public virtual async Task <IEnumerable <TResource> > GetAsync() { _hookExecutor?.BeforeRead <TResource>(ResourcePipeline.Get); var entityQuery = _repository.Get(); entityQuery = ApplyFilter(entityQuery); entityQuery = ApplySort(entityQuery); entityQuery = ApplyInclude(entityQuery); entityQuery = ApplySelect(entityQuery); if (!IsNull(_hookExecutor, entityQuery)) { var entities = await _repository.ToListAsync(entityQuery); _hookExecutor.AfterRead(entities, ResourcePipeline.Get); entityQuery = _hookExecutor.OnReturn(entities, ResourcePipeline.Get).AsQueryable(); } if (_options.IncludeTotalRecordCount) { _pageService.TotalRecords = await _repository.CountAsync(entityQuery); } // pagination should be done last since it will execute the query var pagedEntities = await ApplyPageQueryAsync(entityQuery); return(pagedEntities); }
/// <inheritdoc /> public virtual async Task <IReadOnlyCollection <TResource> > GetAsync() { _traceWriter.LogMethodStart(); _hookExecutor?.BeforeRead <TResource>(ResourcePipeline.Get); if (_options.IncludeTotalResourceCount) { var topFilter = _queryLayerComposer.GetTopFilter(); _paginationContext.TotalResourceCount = await _repository.CountAsync(topFilter); if (_paginationContext.TotalResourceCount == 0) { return(Array.Empty <TResource>()); } } var queryLayer = _queryLayerComposer.Compose(_request.PrimaryResource); var resources = await _repository.GetAsync(queryLayer); if (_hookExecutor != null) { _hookExecutor.AfterRead(resources, ResourcePipeline.Get); return(_hookExecutor.OnReturn(resources, ResourcePipeline.Get).ToArray()); } if (queryLayer.Pagination?.PageSize != null && queryLayer.Pagination.PageSize.Value == resources.Count) { _paginationContext.IsPageFull = true; } return(resources); }
public void BeforeReadSingle <TResource, TId>(TId id, ResourcePipeline pipeline) where TResource : class, IIdentifiable <TId> { var temporaryResource = _resourceFactory.CreateInstance <TResource>(); temporaryResource.Id = id; _resourceHookExecutor.BeforeRead <TResource>(pipeline, temporaryResource.StringId); }
public virtual async Task <IReadOnlyCollection <TResource> > GetAsync() { _logger.LogTrace($"Entering {nameof(GetAsync)}()."); _hookExecutor?.BeforeRead <TResource>(ResourcePipeline.Get); if (_options.IncludeTotalResourceCount) { var topFilter = _queryLayerComposer.GetTopFilter(); _paginationContext.TotalResourceCount = await _repository.CountAsync(topFilter); } var queryLayer = _queryLayerComposer.Compose(_currentRequest.PrimaryResource); var resources = await _repository.GetAsync(queryLayer); if (_hookExecutor != null) { _hookExecutor.AfterRead(resources, ResourcePipeline.Get); return(_hookExecutor.OnReturn(resources, ResourcePipeline.Get).ToList()); } return(resources); }