public async Task <IList <ContentPage> > GetByIdAsync(IList <string> ids)
        {
            return(await _grpcCallerService.CallService(_contentPageServiceProvider.GrpcEndpoint, async (grpcChannel) =>
            {
                var client = new ContentPageService.ContentPageServiceClient(grpcChannel);
                var response = await client.GetByIdsAsync(new GetByIdsRequest
                {
                    Ids = { ids }
                });

                return response.ContentPages;
            }));
        }
        public async Task <IList <ContentPage> > GetByHandleAsync(IList <string> handles,
                                                                  string languageCode)
        {
            return(await _grpcCallerService.CallService(_contentPageServiceProvider.GrpcEndpoint, async (grpcChannel) =>
            {
                var client = new ContentPageService.ContentPageServiceClient(grpcChannel);
                var response = await client.GetByHandlesAsync(new GetByHandlesRequest
                {
                    Handles = { handles }
                });

                // Filter out matches in other languages
                return response.ContentPages
                .Where(x => x.Handles
                       .Any(ls => ls.LanguageCode == languageCode && handles.Contains(ls.Value)))
                .ToList();
            }));
        }
        public async Task <SearchResult <ContentPage> > GetBySearchAsync(string searchTerm,
                                                                         string languageCode,
                                                                         string parentId,
                                                                         string pageCursor,
                                                                         int pageSize,
                                                                         ContentPageSortKey sortKey,
                                                                         bool reverse)
        {
            return(await _grpcCallerService.CallService(_contentPageServiceProvider.GrpcEndpoint, async (grpcChannel) =>
            {
                var client = new ContentPageService.ContentPageServiceClient(grpcChannel);
                var response = await client.GetBySearchAsync(new GetBySearchRequest
                {
                    SearchTerm = searchTerm,
                    LanguageCode = languageCode,
                    ParentId = parentId,
                    PageCursor = pageCursor,
                    PageSize = pageSize,
                    SortKey = sortKey,
                    Reverse = reverse,
                });

                var results = response
                              .Results
                              .Select(x => new CursorNodeResult <ContentPage>
                {
                    Cursor = x.Cursor,
                    Node = x.Node
                })
                              .ToList();

                return new SearchResult <ContentPage>
                {
                    HasNextPage = response.HasNextPage,
                    HasPreviousPage = response.HasPreviousPage,
                    StartCursor = response.StartCursor,
                    EndCursor = response.EndCursor,
                    TotalResults = response.TotalResults,
                    Results = results,
                };
            }));
        }