using Microsoft.eShopOnContainers.Services.Ordering.Domain.Seedwork; using System; using System.Collections; using System.Collections.Generic; using System.Linq; namespace Microsoft.eShopOnContainers.Services.Ordering.Domain.AggregatesModel.BuyerAggregate { public class Buyer : Entity, IAggregateRoot { public string IdentityGuid { get; private set; } private List _paymentMethods; public IEnumerable PaymentMethods => _paymentMethods.AsReadOnly(); protected Buyer() { _paymentMethods = new List(); } public Buyer(string identity) : this() { if (String.IsNullOrWhiteSpace(identity)) { throw new ArgumentNullException(nameof(identity)); } IdentityGuid = identity; } 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; } } } }