private object ResolveQuickSearch(ResolveConnectionContext <object> context)
        {
            var viewModel = new FilterOptionViewModel
            {
                Page     = ConnectionUtils.OffsetOrDefault(context.After, 0) / context.PageSize ?? 10,
                PageSize = context.PageSize ?? 10,
                Q        = context.GetArgument <string>("query")
            };
            IEnumerable <ProductTileViewModel> products =
                _searchService.QuickSearch(viewModel);

            return(ConnectionUtils.ToConnection(
                       products,
                       context,
                       viewModel.Page * viewModel.PageSize,
                       viewModel.TotalCount));
        }
        private async static Task <object> ResolveConnectionLinks(
            ILinkRepository linkRepository,
            ResolveConnectionContext <object> context)
        {
            var first             = context.First;
            var afterCursor       = Cursor.FromCursor <int?>(context.After);
            var last              = context.Last;
            var beforeCursor      = Cursor.FromCursor <int?>(context.Before);
            var cancellationToken = context.CancellationToken;
            var searchText        = context.GetArgument <string>("searchText");

            var getLinksTask           = GetLinks(linkRepository, searchText, first, afterCursor, last, beforeCursor, cancellationToken);
            var getHasNextPageTask     = GetHasNextPageLinks(linkRepository, searchText, first, afterCursor, cancellationToken);
            var getHasPreviousPageTask = GetHasPreviousPageLinks(linkRepository, searchText, last, beforeCursor, cancellationToken);
            var totalCountTask         = linkRepository.GetTotalCount(searchText, cancellationToken);

            await Task.WhenAll(getLinksTask, getHasNextPageTask, getHasPreviousPageTask, totalCountTask);

            var links           = getLinksTask.Result;
            var hasNextPage     = getHasNextPageTask.Result;
            var hasPreviousPage = getHasPreviousPageTask.Result;
            var totalCount      = totalCountTask.Result;

            var(firstCursor, lastCursor) = Cursor.GetFirstAndLastCursor(links, x => x.Id);

            return(new Connection <Link>()
            {
                Edges = links
                        .Select(x =>
                                new Edge <Link>()
                {
                    Cursor = Cursor.ToCursor(x.Id),
                    Node = x
                })
                        .ToList(),
                PageInfo = new PageInfo()
                {
                    HasNextPage = hasNextPage,
                    HasPreviousPage = hasPreviousPage,
                    StartCursor = firstCursor,
                    EndCursor = lastCursor,
                },
                TotalCount = totalCount,
            });
        }