Exemple #1
0
 private static RefundProductOrderData Map(OrderPlaced e, RefundProductOrderData d)
 {
     return(d.With(x =>
     {
         x.OrderId = e.OrderId;
         x.Order = new Order {
             CustomerId = e.CustomerId, Sku = e.ProductId, WhenOrderPlaced = e.When
         };
     }));
 }
Exemple #2
0
        private static IEnumerable <IDomainEvent> Handle(RefundProductOrderData d, Placed <RefundProductOrder> e)
        {
            if (d.Product == null)
            {
                throw new EventualConsistencyException <ProductOnSale>();
            }

            if (d.Policy == null)
            {
                throw new EventualConsistencyException <PolicyInPlace>();
            }

            if (d.Customer?.CustomerMarkedAsFraud ?? false)
            {
                return new[] { new RefundRejected {
                                   OrderId = d.OrderId
                               } }
            }
            ;

            if (e.When.Value > d.Product.WhenSaleExpires)
            {
                return new[] { new RefundRejected {
                                   OrderId = d.OrderId
                               } }
            }
            ;

            if (e.When.Value.Subtract(d.Order.WhenOrderPlaced.Value).TotalDays > d.Policy.CoolingOffPeriodInDays.Value)
            {
                return new[] { new RefundRejected {
                                   OrderId = d.OrderId
                               } }
            }
            ;

            return(new[] { new RefundApproved {
                               OrderId = d.OrderId
                           } });
        }
    }
Exemple #3
0
 private static RefundProductOrderData Map(ProductOnSale e, RefundProductOrderData d)
 {
     return(d.With(x => x.Product = new Product {
         PolicyId = e.PolicyId, WhenSaleExpires = e.WhenSaleExpires
     }));
 }
Exemple #4
0
 private static RefundProductOrderData Map(CustomerMarkedAsFraud e, RefundProductOrderData d)
 {
     return(d.With(x => x.Customer = new Customer {
         CustomerMarkedAsFraud = true
     }));
 }
Exemple #5
0
 private static RefundProductOrderData Map(PolicyInPlace e, RefundProductOrderData d)
 {
     return(d.With(x => x.Policy = new ProductPolicy {
         CoolingOffPeriodInDays = e.CoolingOffPeriodInDays, RefundAllowed = e.RefundsAllowed
     }));
 }