GetProductsByIds(GetProductsByIdsRequest request,
                  CancellationToken cancellationToken = default)
 => await _daprClient.InvokeMethodAsync <GetProductsByIdsRequest, GetProductsByIdsResponse>
     (StoreAppId,
     "api/product/get-by-ids", request,
     HttpExtension,
     cancellationToken);
Exemplo n.º 2
0
        public async Task <GetProductsResponse> Handle(GetProductsRequest request, CancellationToken cancellationToken)
        {
            var products = await this._dbContext.Set <Product>()
                           .AsNoTracking()
                           .OrderBy(x => x.Name)
                           .Skip((request.PageIndex - 1) * request.PageSize)
                           .Take(request.PageSize)
                           .ProjectTo <ProductDto>(this._mapper.ConfigurationProvider)
                           .ToListAsync(cancellationToken);

            var totalOfProducts = await this._dbContext.Set <Product>().CountAsync(cancellationToken: cancellationToken);

            var getProductsByIdsRequest = new GetProductsByIdsRequest
            {
                ProductIds = products.Select(x => x.ProductId)
            };
            var productsFromInventories = await this._inventoriesGateway.GetProductsByIds(getProductsByIdsRequest, cancellationToken);

            foreach (var productInventory in productsFromInventories.Products)
            {
                var product = products.FirstOrDefault(x => x.ProductId == productInventory.Id);
                if (product != null)
                {
                    product.Inventories = productInventory.Inventories?.Select(x => new InventoryDto
                    {
                        Name        = x.Name,
                        Location    = x.Location,
                        Quantity    = x.Quantity,
                        CanPurchase = x.CanPurchase,
                        InventoryId = x.InventoryId
                    });
                }
            }

            var result = new GetProductsResponse
            {
                Products        = products,
                TotalOfProducts = totalOfProducts
            };

            return(result);
        }
 public async Task <GetProductsByIdsResponse> GetProductsByIds(GetProductsByIdsRequest request, CancellationToken cancellationToken = default(CancellationToken))
 => await this._daprClient.InvokeMethodAsync <GetProductsByIdsRequest, GetProductsByIdsResponse>(this.InventoryAppId,
                                                                                                 "api/products/get-by-ids",
                                                                                                 request,
                                                                                                 this.httpExtension,
                                                                                                 cancellationToken);