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); } }); }