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);
            }
        }
Beispiel #2
0
        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);
        }
Beispiel #6
0
        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);
        }
Beispiel #7
0
        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);
        }
Beispiel #8
0
        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);
        }
Beispiel #9
0
        public async Task <IActionResult> Search([FromBody] ThumbnailTaskSearchCriteria criteria)
        {
            var result = await _thumbnailTaskSearchService.SearchAsync(criteria);

            return(Ok(result));
        }