private async Task DecreaseStock(long productId, int count, long stockActionId, DateTime stockActionDate, CancellationToken cancellationToken) { StockSnapshotModel stockSnapshotModel = await _dataContext.StockSnapshotModels .FirstOrDefaultAsync(s => s.ProductId == productId, cancellationToken); if (stockSnapshotModel == null) { throw new StockSnapshotNotFoundException(productId); } if (stockSnapshotModel.AvailableStock < count) { throw new InsufficientStockException(productId, stockSnapshotModel.AvailableStock, count); } stockSnapshotModel.DecreaseStock(count, stockActionId, stockActionDate); await _dataContext.SaveChangesAsync(cancellationToken); var stockCountDecreasedIntegrationEvent = new StockCountDecreasedIntegrationEvent(stockSnapshotModel.ProductId, stockSnapshotModel.StockActionId, count, stockSnapshotModel.AvailableStock, stockSnapshotModel.LastStockActionDate); _integrationEventPublisher.AddEvent(stockCountDecreasedIntegrationEvent); }
public async Task Consume(ConsumeContext <StockCountDecreasedIntegrationEvent> context) { StockCountDecreasedIntegrationEvent stockCountDecreasedIntegrationEvent = context.Message; await SyncAvailableStock(stockCountDecreasedIntegrationEvent.ProductId, stockCountDecreasedIntegrationEvent.StockActionId, stockCountDecreasedIntegrationEvent.AvailableStock); }