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, }); }