public async Task Handle(SkuStockCreated msg, IMessageMetadata metadata = null)
        {
            using (var context = _contextFactory())
            {
                var skuStock = new SkuStock
                {
                    Id = msg.SourceId,
                    AvailableQuantity          = 0,
                    Created                    = msg.CreatedTime,
                    CustomersReservationsTotal = 0,
                    LastModified               = msg.CreatedTime,
                    ReservedQuantity           = 0,
                    SkuId         = msg.SkuId,
                    TotalQuantity = 0
                };

                var history = CreateHistory(skuStock, StockOperation.Created, msg.Quantity);

                skuStock.TotalQuantity     = msg.Quantity;
                skuStock.AvailableQuantity = msg.Quantity;

                FillNewQuantities(history, skuStock);

                context.SkuStocks.Add(skuStock);
                context.StockHistory.Add(history);
                await context.SaveChangesAsync();
            }
        }
 private SkuStockHistory CreateHistory(SkuStock skuStock, StockOperation stockOperation, int quantity)
 {
     return(new SkuStockHistory
     {
         OldAvailableQuantity = skuStock.AvailableQuantity,
         OldTotalQuantity = skuStock.TotalQuantity,
         OldReservedQuantity = skuStock.ReservedQuantity,
         Operation = stockOperation,
         Quanity = quantity,
         StockId = skuStock.Id,
         Number = _sequenceProvider.GetNext(SkuHistorySequenceName)
     });
 }
 private void FillNewQuantities(SkuStockHistory history, SkuStock skuStock)
 {
     history.NewAvailableQuantity = skuStock.AvailableQuantity;
     history.NewTotalQuantity     = skuStock.TotalQuantity;
     history.NewReservedQuantity  = skuStock.ReservedQuantity;
 }