Add new methods to order aggregate root and modify saga process
This commit is contained in:
		
							parent
							
								
									f65ce1b9ee
								
							
						
					
					
						commit
						7c27ac498b
					
				@ -17,10 +17,5 @@ namespace Ordering.API.Application.Sagas
 | 
				
			|||||||
        public abstract TEntity FindSagaById(int id);
 | 
					        public abstract TEntity FindSagaById(int id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public abstract Task<bool> SaveChangesAsync();
 | 
					        public abstract Task<bool> SaveChangesAsync();
 | 
				
			||||||
        //{
 | 
					 | 
				
			||||||
        //    var ctx = context ?? _dbContext;
 | 
					 | 
				
			||||||
        //    var result = await ctx.SaveChangesAsync();
 | 
					 | 
				
			||||||
        //    return result > 0;
 | 
					 | 
				
			||||||
        //}
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,6 @@
 | 
				
			|||||||
using Microsoft.eShopOnContainers.Services.Ordering.Domain.Seedwork;
 | 
					using Microsoft.eShopOnContainers.Services.Ordering.Domain.Seedwork;
 | 
				
			||||||
using Ordering.Domain.Events;
 | 
					using Ordering.Domain.Events;
 | 
				
			||||||
 | 
					using Ordering.Domain.Exceptions;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
@ -93,18 +94,38 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.Domain.AggregatesModel.O
 | 
				
			|||||||
            _buyerId = id;
 | 
					            _buyerId = id;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public void SetOrderStatusId(int id)
 | 
					        #region Status Changes
 | 
				
			||||||
 | 
					        public void SetSubmitedStatus()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            _orderStatusId = id;
 | 
					            _orderStatusId = OrderStatus.Submited.Id;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public void SetOrderStockConfirmed(IEnumerable<int> orderStockNotConfirmedItems = null)
 | 
					        public void SetAwaitingValidationStatus()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if(orderStockNotConfirmedItems is null)
 | 
					            if (_orderStatusId != OrderStatus.Submited.Id)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                OrderStatus = OrderStatus.StockValidated;
 | 
					                StatusChangeException();
 | 
				
			||||||
 | 
					            }  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            _orderStatusId = OrderStatus.AwaitingValidation.Id;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            AddDomainEvent(new OrderStatusChangedToAwaitingValidationDomainEvent(Id, OrderItems));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public void SetStockConfirmedStatus(IEnumerable<int> orderStockNotConfirmedItems = null)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (_orderStatusId != OrderStatus.AwaitingValidation.Id)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                StatusChangeException();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (orderStockNotConfirmedItems is null)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                OrderStatus = OrderStatus.StockConfirmed;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                _description = "All the items were confirmed with available stock.";
 | 
					                _description = "All the items were confirmed with available stock.";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                AddDomainEvent(new OrderStatusChangedToStockConfirmedDomainEvent(Id));
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            else
 | 
					            else
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@ -117,10 +138,36 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.Domain.AggregatesModel.O
 | 
				
			|||||||
                var itemsStockNotConfirmedDescription = string.Join(", ", itemsStockNotConfirmedProductNames);
 | 
					                var itemsStockNotConfirmedDescription = string.Join(", ", itemsStockNotConfirmedProductNames);
 | 
				
			||||||
                _description = $"The product items don't have stock: ({itemsStockNotConfirmedDescription}).";   
 | 
					                _description = $"The product items don't have stock: ({itemsStockNotConfirmedDescription}).";   
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					 | 
				
			||||||
            AddDomainEvent(new OrderStockConfirmedDomainEvent(Id, OrderStatus));
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public void SetPaidStatus()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (_orderStatusId != OrderStatus.StockConfirmed.Id)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                StatusChangeException();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            _orderStatusId = OrderStatus.Paid.Id;
 | 
				
			||||||
 | 
					            _description = "The payment was performed at a simulated \"American Bank checking bank account endinf on XX35071\"";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            AddDomainEvent(new OrderStatusChangedToPaidDomainEvent(Id, OrderItems));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public void SetShippedStatus()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (_orderStatusId != OrderStatus.Paid.Id)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                StatusChangeException();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            _orderStatusId = OrderStatus.Shipped.Id;
 | 
				
			||||||
 | 
					            _description = "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //Call Domain Event
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private void AddOrderStartedDomainEvent(string userId, int cardTypeId, string cardNumber,
 | 
					        private void AddOrderStartedDomainEvent(string userId, int cardTypeId, string cardNumber,
 | 
				
			||||||
                string cardSecurityNumber, string cardHolderName, DateTime cardExpiration)
 | 
					                string cardSecurityNumber, string cardHolderName, DateTime cardExpiration)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
@ -130,6 +177,11 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.Domain.AggregatesModel.O
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            this.AddDomainEvent(orderStartedDomainEvent);
 | 
					            this.AddDomainEvent(orderStartedDomainEvent);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private void StatusChangeException()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            throw new OrderingDomainException("Not able to process order event. Reason: no valid order status change");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -12,7 +12,7 @@
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        public static OrderStatus Submited = new OrderStatus(1, nameof(Submited).ToLowerInvariant());
 | 
					        public static OrderStatus Submited = new OrderStatus(1, nameof(Submited).ToLowerInvariant());
 | 
				
			||||||
        public static OrderStatus AwaitingValidation = new OrderStatus(2, nameof(AwaitingValidation).ToLowerInvariant());
 | 
					        public static OrderStatus AwaitingValidation = new OrderStatus(2, nameof(AwaitingValidation).ToLowerInvariant());
 | 
				
			||||||
        public static OrderStatus StockValidated = new OrderStatus(3, nameof(StockValidated).ToLowerInvariant());
 | 
					        public static OrderStatus StockConfirmed = new OrderStatus(3, nameof(StockConfirmed).ToLowerInvariant());
 | 
				
			||||||
        public static OrderStatus Paid = new OrderStatus(4, nameof(Paid).ToLowerInvariant());
 | 
					        public static OrderStatus Paid = new OrderStatus(4, nameof(Paid).ToLowerInvariant());
 | 
				
			||||||
        public static OrderStatus Shipped = new OrderStatus(5, nameof(Shipped).ToLowerInvariant());
 | 
					        public static OrderStatus Shipped = new OrderStatus(5, nameof(Shipped).ToLowerInvariant());
 | 
				
			||||||
        public static OrderStatus Cancelled = new OrderStatus(6, nameof(Cancelled).ToLowerInvariant());
 | 
					        public static OrderStatus Cancelled = new OrderStatus(6, nameof(Cancelled).ToLowerInvariant());
 | 
				
			||||||
@ -27,7 +27,7 @@
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public static IEnumerable<OrderStatus> List() =>
 | 
					        public static IEnumerable<OrderStatus> List() =>
 | 
				
			||||||
            new[] { Submited, AwaitingValidation, StockValidated, Paid, Shipped, Cancelled };
 | 
					            new[] { Submited, AwaitingValidation, StockConfirmed, Paid, Shipped, Cancelled };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public static OrderStatus FromName(string name)
 | 
					        public static OrderStatus FromName(string name)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					namespace Ordering.Domain.Events
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    using MediatR;
 | 
				
			||||||
 | 
					    using Microsoft.eShopOnContainers.Services.Ordering.Domain.AggregatesModel.OrderAggregate;
 | 
				
			||||||
 | 
					    using System.Collections.Generic;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// <summary>
 | 
				
			||||||
 | 
					    /// Event used when the grace period order is confirmed
 | 
				
			||||||
 | 
					    /// </summary>
 | 
				
			||||||
 | 
					    public class OrderStatusChangedToAwaitingValidationDomainEvent
 | 
				
			||||||
 | 
					         : IAsyncNotification
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        public int OrderId { get; }
 | 
				
			||||||
 | 
					        public IEnumerable<OrderItem> OrderItems { get; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public OrderStatusChangedToAwaitingValidationDomainEvent(int orderId,
 | 
				
			||||||
 | 
					            IEnumerable<OrderItem> orderItems)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            OrderId = orderId;
 | 
				
			||||||
 | 
					            OrderItems = orderItems;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					namespace Ordering.Domain.Events
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    using MediatR;
 | 
				
			||||||
 | 
					    using Microsoft.eShopOnContainers.Services.Ordering.Domain.AggregatesModel.OrderAggregate;
 | 
				
			||||||
 | 
					    using System.Collections.Generic;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// <summary>
 | 
				
			||||||
 | 
					    /// Event used when the order is paid
 | 
				
			||||||
 | 
					    /// </summary>
 | 
				
			||||||
 | 
					    public class OrderStatusChangedToPaidDomainEvent
 | 
				
			||||||
 | 
					        : IAsyncNotification
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        public int OrderId { get; }
 | 
				
			||||||
 | 
					        public IEnumerable<OrderItem> OrderItems { get; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public OrderStatusChangedToPaidDomainEvent(int orderId,
 | 
				
			||||||
 | 
					            IEnumerable<OrderItem> orderItems)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            OrderId = orderId;
 | 
				
			||||||
 | 
					            OrderItems = orderItems;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,16 @@
 | 
				
			|||||||
 | 
					namespace Ordering.Domain.Events
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    using MediatR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// <summary>
 | 
				
			||||||
 | 
					    /// Event used when the order stock items are confirmed
 | 
				
			||||||
 | 
					    /// </summary>
 | 
				
			||||||
 | 
					    public class OrderStatusChangedToStockConfirmedDomainEvent
 | 
				
			||||||
 | 
					        : IAsyncNotification
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        public int OrderId { get; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public OrderStatusChangedToStockConfirmedDomainEvent(int orderId)
 | 
				
			||||||
 | 
					            => OrderId = orderId;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -1,24 +0,0 @@
 | 
				
			|||||||
using Microsoft.eShopOnContainers.Services.Ordering.Domain.AggregatesModel.OrderAggregate;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
namespace Ordering.Domain.Events
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    using MediatR;
 | 
					 | 
				
			||||||
    using System.Collections.Generic;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /// <summary>
 | 
					 | 
				
			||||||
    /// Event used when the order stock items are verified
 | 
					 | 
				
			||||||
    /// </summary>
 | 
					 | 
				
			||||||
    public class OrderStockConfirmedDomainEvent
 | 
					 | 
				
			||||||
        : IAsyncNotification
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        public int OrderId { get; }
 | 
					 | 
				
			||||||
        public OrderStatus OrderStatus { get; }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        public OrderStockConfirmedDomainEvent(int orderId,
 | 
					 | 
				
			||||||
            OrderStatus orderStatus)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            OrderId = orderId;
 | 
					 | 
				
			||||||
            OrderStatus = orderStatus;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user