public async Task <StockResponse> Handle(UpdateAvailableStockCommand request, CancellationToken cancellationToken)
        {
            if (request == null)
            {
                throw new RequestException();
            }

            StockModel stockModel = _dataContext.StockModels.First(s => s.Id == request.StockId);

            if (stockModel.StockActionId > request.StockActionId)
            {
                throw new StockTimeLineException(stockModel.StockActionId, request.StockActionId);
            }

            stockModel.UpdateStock(request.AvailableStock, request.StockActionId, request.LastStockOperationDate);
            await _dataContext.SaveChangesAsync(cancellationToken);

            var stockResponse = stockModel.ToStockResponse();

            return(stockResponse);
        }
        private async Task SyncAvailableStock(long productId, long stockActionId, int availableStock)
        {
            await _distributedLockManager.LockAsync(UpdateAvailableStockLockKey(productId),
                                                    async() =>
            {
                var queryStockCommand = new QueryStockCommand(0, 1)
                {
                    ProductId = productId
                };

                StockCollectionResponse stockCollectionResponse = await _mediator.Send(queryStockCommand);
                StockResponse stockResponse = stockCollectionResponse.Data.First();

                var updateAvailableStockCommand = new UpdateAvailableStockCommand(stockResponse.StockId, availableStock, stockActionId, stockResponse.LastStockOperationDate);
                try
                {
                    await _mediator.Send(updateAvailableStockCommand);
                }
                catch (StockTimeLineException e)
                {
                    _logger.LogInformation(e.Message);
                }
            });
        }