Ejemplo n.º 1
0
        public void OnMessage(IWarehouseAvailableStockChangedV1 message)
        {
            var requestTelemetry = RequestTelemetryHelper.Start("Warehouse Stock Changed Processing Rate", DateTime.UtcNow);

            CallContext.LogicalSetData(CORRELATION_SLOT, requestTelemetry.Id);
            Stopwatch requestTimer = Stopwatch.StartNew();

            if (message == null)
            {
                throw new ArgumentNullException();
            }

            var skuVariant = _skuVariantCacheManager.GetItemByKey(message.Sku);

            if (skuVariant == null)
            {
                throw new Exception($"Sku Variant Not Found For Restriction Attribute Accepted with Sku: {message.Sku}");
            }

            var regionStock = _regionStockAggregateStore.GetRegionStockByVariantId(skuVariant.VariantId);

            if (regionStock != null)
            {
                IRegionStockAggregate regionStockAggregate = new RegionStockAggregate(regionStock.VariantId,
                                                                                      regionStock.WarehouseAvailableStocks.ToList(),
                                                                                      regionStock.RegionStocks.ToList(), null, regionStock.Version);

                regionStockAggregate.ApplyStockChanges(new WarehouseAvailableStockItem(message.FulfilmentCentre,
                                                                                       message.Sku, message.Pickable, message.Reserved, message.Allocated, message.Version));

                _regionStockAggregateStore.UpdateRegionStock(RegionStockDocument.CreateFrom(regionStockAggregate));

                PublishRegionStockChanged(regionStockAggregate);
            }
            else
            {
                throw new RegionStockAggregateNotFoundException($"Failed retrieving Region Stock Aggregate for Sku {message.Sku}");
            }

            RequestTelemetryHelper.Dispatch(_telemetryClient, requestTelemetry, requestTimer.Elapsed, true);
        }
Ejemplo n.º 2
0
        public void OnMessage(IVariantCopyCompletedV1 message)
        {
            var requestTelemetry = RequestTelemetryHelper.Start("Variant Copy Completed Processing Rate", DateTime.UtcNow);

            CallContext.LogicalSetData(CORRELATION_SLOT, requestTelemetry.Id);
            Stopwatch requestTimer = Stopwatch.StartNew();

            if (message == null)
            {
                throw new ArgumentNullException();
            }

            var regionStock = _regionStockAggregateStore.GetRegionStockByVariantId(message.VariantId);
            IRegionStockAggregate regionStockAggregate;

            if (regionStock != null)
            {
                regionStockAggregate = new RegionStockAggregate(regionStock.VariantId,
                                                                regionStock.WarehouseAvailableStocks.ToList(), regionStock.RegionStocks.ToList(), null,
                                                                regionStock.Version);

                if (regionStockAggregate.WarehouseAvailableStocks.All(x => x.Sku != message.SKU))
                {
                    regionStockAggregate.ApplyStockChanges(new WarehouseAvailableStockItem("", message.SKU, 0, 0, 0, DateTime.UtcNow));
                }
            }
            else
            {
                regionStockAggregate = new RegionStockAggregate(message.VariantId,
                                                                new List <WarehouseAvailableStockItem>(),
                                                                new List <RegionStockItem>(),
                                                                null,
                                                                null);
                regionStockAggregate.ApplyStockChanges(new WarehouseAvailableStockItem("", message.SKU, 0, 0, 0, DateTime.UtcNow));
            }

            _regionStockAggregateStore.Persist(regionStockAggregate);
             
            RequestTelemetryHelper.Dispatch(_telemetryClient, requestTelemetry, requestTimer.Elapsed, true);
        }