63 lines
1.9 KiB
C#
Raw Normal View History

namespace Microsoft.eShopOnContainers.Services.Ordering.Domain.AggregatesModel.OrderAggregate
{
using Microsoft.eShopOnContainers.Services.Ordering.Domain.SeedWork;
using Microsoft.eShopOnContainers.Services.Ordering.Domain.AggregatesModel.BuyerAggregate;
using System;
using System.Collections.Generic;
2017-01-12 17:09:23 -08:00
//(CDLTLL)
//TO DO: Need to add additional Domain Logic to this Aggregate-Root for
//scenarios related to Order state changes, stock availability validation, etc.
public class Order
: Entity, IAggregateRoot
{
public int BuyerId { get; private set; }
public Buyer Buyer { get; private set; }
public DateTime OrderDate { get; private set; }
2016-11-22 18:40:47 +01:00
public int StatusId { get; private set; }
public OrderStatus Status { get; private set; }
2016-12-14 18:23:57 +01:00
public ICollection<OrderItem> OrderItems { get; private set; }
2016-11-22 18:40:47 +01:00
public int? ShippingAddressId { get; private set; }
public Address ShippingAddress { get; private set; }
2016-11-22 18:40:47 +01:00
public int PaymentId { get; private set; }
public Payment Payment { get; private set; }
protected Order() { }
public Order(int buyerId, int paymentId)
{
BuyerId = buyerId;
PaymentId = paymentId;
StatusId = OrderStatus.InProcess.Id;
OrderDate = DateTime.UtcNow;
2016-12-14 18:23:57 +01:00
OrderItems = new List<OrderItem>();
}
public void SetAddress(Address address)
{
if (address == null)
{
throw new ArgumentNullException(nameof(address));
}
ShippingAddress = address;
}
2016-12-14 18:23:57 +01:00
public void AddOrderItem(OrderItem item)
{
// Note: Some logic could be added here (like grouping items in one single OrderItem)
// Also validation logic could be added here (like ensuring adding almost one item)
OrderItems.Add(item);
}
}
}