Exemplo n.º 1
0
        public void ProcessDone(long[] componentsIds, decimal processedAmount, V2.ItemIdQuantityPair[] processedValues)
        {
            if (Amount < processedAmount)
            {
                throw new ArgumentException($"{nameof(processedAmount)} is more than {nameof(Amount)}");
            }

            var unhandledWires = _components.Where(wire => !wire.IsHandled).Select(x => x.Id).ToArray();

            if (componentsIds.Any(w => !unhandledWires.Contains(w)))
            {
                throw new ArgumentException($"{nameof(componentsIds)} has unknown ids");
            }

            var processedProductIds = _products.Select(p => p.ItemId).ToArray();

            if (processedValues.Any(p => !processedProductIds.Contains(p.ItemId)))
            {
                throw new ArgumentException($"{nameof(processedValues)} has unknown ids");
            }

            var refundedEvent = new V2.ProcessedEvent(componentsIds, processedValues, processedAmount);

            Update(refundedEvent);
        }
Exemplo n.º 2
0
        public void When(V2.ProcessedEvent domainEvent)
        {
            foreach (var item in domainEvent.ProductValues)
            {
                var product = _products.First(x => x.ItemId.Equals(item.ItemId));
                if (product.Quantity == item.Quantity || item.ShouldProcessAll)
                {
                    _products.Remove(product);
                }
                product.SubtractQuantity(item.Quantity);
            }

            Array.ForEach(_components.Where(x => domainEvent.ComponentIds.Contains(x.Id)).ToArray(),
                          wire => wire.Handled());
            Amount -= domainEvent.Amount;
        }
 public async Task Projected(string key, V2.ProcessedEvent domainEvent, CancellationToken cancellationToken)
 {
     var processed = domainEvent.ComponentIds.Select(cid => _componentRepository.SetProcessedAsync(cid, cancellationToken));
     await Task.WhenAll(processed);
 }