using Microsoft.eShopOnContainers.Services.Ordering.Domain.Seedwork; using System; using System.Collections.Generic; using System.Linq; namespace Microsoft.eShopOnContainers.Services.Ordering.Domain.AggregatesModel.BuyerAggregate { public class Buyer : Entity, IAggregateRoot { public string FullName { get; private set; } private HashSet _paymentMethods; public IEnumerable PaymentMethods => _paymentMethods?.ToList().AsReadOnly(); protected Buyer() { } public Buyer(string identity) { if (String.IsNullOrWhiteSpace(identity)) { throw new ArgumentNullException(nameof(identity)); } FullName = identity; _paymentMethods = new HashSet(); } public PaymentMethod AddPaymentMethod(int cardTypeId, string alias, string cardNumber, string securityNumber, string cardHolderName, DateTime expiration) { var existingPayment = _paymentMethods.Where(p => p.IsEqualTo(cardTypeId, cardNumber, expiration)) .SingleOrDefault(); if (existingPayment != null) { return existingPayment; } else { var payment = new PaymentMethod(cardTypeId, alias, cardNumber, securityNumber, cardHolderName, expiration); _paymentMethods.Add(payment); return payment; } } } }