using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using Volo.Abp.Domain.Entities; namespace Volo.Abp.TestApp.Domain { [Table("AppPhones")] public class Phone : Entity { public virtual Guid PersonId { get; set; } public virtual string Number { get; set; } public virtual PhoneType Type { get; set; } private Phone() { } public Phone(Guid personId, string number, PhoneType type = PhoneType.Mobile) { PersonId = personId; Number = number; Type = type; } } public class Order : AggregateRoot { public virtual string ReferenceNo { get; protected set; } public virtual float TotalItemCount { get; protected set; } public virtual DateTime CreationTime { get; protected set; } public virtual List OrderLines { get; protected set; } protected Order() { } public Order(Guid id, string referenceNo) { Id = id; ReferenceNo = referenceNo; OrderLines = new List(); } public void AddProduct(Guid productId, int count) { if (count <= 0) { throw new ArgumentException("You can not add zero or negative count of products!", nameof(count)); } var existingLine = OrderLines.FirstOrDefault(ol => ol.ProductId == productId); if (existingLine == null) { OrderLines.Add(new OrderLine(this.Id, productId, count)); } else { existingLine.ChangeCount(existingLine.Count + count); } TotalItemCount += count; } } public class OrderLine : Entity { public virtual Guid OrderId { get; protected set; } public virtual Guid ProductId { get; protected set; } public virtual int Count { get; protected set; } protected OrderLine() { } public OrderLine(Guid orderId, Guid productId, int count) { OrderId = orderId; ProductId = productId; Count = count; } internal void ChangeCount(int newCount) { Count = newCount; } } }