public override async Task <AssetsDictionaryResponse> AssetsDictionary(Empty request, ServerCallContext context) { var result = new AssetsDictionaryResponse(); var categories = await _assetsService.AssetCategoryGetAllAsync(); string clientId = context.GetClientId(); string partnerId = context.GetParnerId(); var assets = await _assetsHelper.GetAssetsAvailableToClientAsync(clientId, partnerId, true); result.Body = new AssetsDictionaryResponse.Types.Body(); result.Body.Categories.AddRange(_mapper.Map <List <AssetCategory> >(categories)); result.Body.Assets.AddRange(_mapper.Map <List <Asset> >(assets)); var popularAssetPairs = await _assetsHelper.GetPopularPairsAsync(assets.Select(x => x.Id).ToList()); foreach (var asset in result.Body.Assets) { if (popularAssetPairs.ContainsKey(asset.Id)) { asset.PopularPairs.AddRange(popularAssetPairs[asset.Id]); } } return(result); }