public async Task <GenericSearchResult <ThumbnailTask> > SearchAsync(ThumbnailTaskSearchCriteria criteria) { using (var repository = _thumbnailRepositoryFactory()) { var query = GetTasksQuery(repository, criteria); var sortInfos = criteria.SortInfos; if (sortInfos.IsNullOrEmpty()) { sortInfos = new[] { new SortInfo { SortColumn = ReflectionUtility.GetPropertyName <ThumbnailTask>(t => t.CreatedDate), SortDirection = SortDirection.Descending } }; } query = query.OrderBySortInfos(sortInfos); var totalCount = await query.CountAsync(); var ids = await query.Skip(criteria.Skip).Take(criteria.Take).Select(x => x.Id).ToArrayAsync(); var thumbnailTasks = await repository.GetThumbnailTasksByIdsAsync(ids); var results = thumbnailTasks.Select(t => t.ToModel(AbstractTypeFactory <ThumbnailTask> .TryCreateInstance())).ToArray(); var retVal = new GenericSearchResult <ThumbnailTask> { TotalCount = totalCount, Results = results.AsQueryable().OrderBySortInfos(sortInfos).ToList() }; return(retVal); } }
public virtual async Task <GenericSearchResult <ThumbnailTask> > SearchAsync(ThumbnailTaskSearchCriteria criteria) { var result = new GenericSearchResult <ThumbnailTask>(); using (var repository = ThumbnailRepositoryFactory()) { var query = GetTasksQuery(repository, criteria); var sortInfos = criteria.SortInfos; if (sortInfos.IsNullOrEmpty()) { sortInfos = new[] { new SortInfo { SortColumn = ReflectionUtility.GetPropertyName <ThumbnailTask>(t => t.CreatedDate), SortDirection = SortDirection.Descending } }; } query = query.OrderBySortInfos(sortInfos); result.TotalCount = await query.CountAsync(); if (criteria.Take > 0) { var ids = await query.Select(x => x.Id).Skip(criteria.Skip).Take(criteria.Take).ToArrayAsync(); result.Results = (await ThumbnailTaskService.GetByIdsAsync(ids)).AsQueryable().OrderBySortInfos(sortInfos).ToArray(); } } return(result); }
public SearchResult <ThumbnailTask> Search(ThumbnailTaskSearchCriteria criteria) { var result = _thumbnailTaskSearchService.Search(criteria); var searchResult = new SearchResult <ThumbnailTask> { Result = result.Results.ToArray(), TotalCount = result.TotalCount }; return(searchResult); }
protected virtual IQueryable <ThumbnailTaskEntity> GetTasksQuery(IThumbnailRepository repository, ThumbnailTaskSearchCriteria criteria) { var query = repository.ThumbnailTasks; if (!criteria.Keyword.IsNullOrEmpty()) { query = query.Where(x => x.Name.Contains(criteria.Keyword)); } return(query); }
public void Search_ThumbnailOptionSearchCriteria_ReturnsGenericSearchResponseOfTasksInExpectedOrder() { var repoMock = GetTaskRepositoryMock(); var target = new ThumbnailTaskSearchService(() => repoMock.Object); var criteria = new ThumbnailTaskSearchCriteria { Sort = "Name:desc;WorkPath:desc" }; var resultTasks = target.SearchAsync(criteria); var expectedTasks = ThumbnailTaskEntitysDataSource.Select(x => x.ToModel(new ThumbnailTask())).OrderByDescending(t => t.Name).ThenByDescending(t => t.WorkPath).ToArray(); Assert.Equal(expectedTasks, resultTasks.Result.Results); }
public void Search_ThumbnailOptionSearchCriteria_ReturnsGenericSearchResponseOfTasksInExpectedOrder() { // Arrange var target = CreateTargetService(); var criteria = new ThumbnailTaskSearchCriteria { Sort = "Name:desc;WorkPath:desc" }; var expectedTasks = ThumbnailTaskEntitiesDataSource.Select(x => x.ToModel(new ThumbnailTask())).OrderByDescending(t => t.Name).ThenByDescending(t => t.WorkPath).ToArray(); // Act var resultTasks = target.SearchAsync(criteria); // Assert Assert.Equal(expectedTasks, resultTasks.Result.Results); }
protected virtual IList <SortInfo> BuildSortExpression(ThumbnailTaskSearchCriteria criteria) { var sortInfos = criteria.SortInfos; if (sortInfos.IsNullOrEmpty()) { sortInfos = new[] { new SortInfo { SortColumn = nameof(ThumbnailOptionEntity.ModifiedDate), SortDirection = SortDirection.Descending } }; } return(sortInfos); }
public virtual async Task <ThumbnailTaskSearchResult> SearchAsync(ThumbnailTaskSearchCriteria criteria) { var result = AbstractTypeFactory <ThumbnailTaskSearchResult> .TryCreateInstance(); using (var repository = _thumbnailRepositoryFactory()) { var sortInfos = BuildSortExpression(criteria); var query = BuildQuery(repository, criteria); result.TotalCount = await query.CountAsync(); if (criteria.Take > 0) { var ids = await query.OrderBySortInfos(sortInfos).ThenBy(x => x.Id) .Select(x => x.Id) .Skip(criteria.Skip).Take(criteria.Take) .ToArrayAsync(); result.Results = (await _thumbnailTaskService.GetByIdsAsync(ids)).OrderBy(x => Array.IndexOf(ids, x.Id)).ToList(); } } return(result); }
public async Task <IActionResult> Search([FromBody] ThumbnailTaskSearchCriteria criteria) { var result = await _thumbnailTaskSearchService.SearchAsync(criteria); return(Ok(result)); }