54 lines
1.8 KiB
C#
Raw Normal View History

using Microsoft.eShopOnContainers.Services.Ordering.Domain.Seedwork;
2017-03-14 18:02:28 +01:00
using Ordering.Domain.Events;
using System;
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; }
2017-03-14 18:02:28 +01:00
private List<PaymentMethod> _paymentMethods;
public IEnumerable<PaymentMethod> PaymentMethods => _paymentMethods.AsReadOnly();
protected Buyer() {
2017-04-17 12:28:12 +02:00
_paymentMethods = new List<PaymentMethod>();
}
public Buyer(string identity) : this()
{
IdentityGuid = !string.IsNullOrWhiteSpace(identity) ? identity : throw new ArgumentNullException(nameof(identity));
}
2017-03-17 18:36:34 -07:00
public PaymentMethod VerifyOrAddPaymentMethod(
2017-03-14 18:02:28 +01:00
int cardTypeId, string alias, string cardNumber,
string securityNumber, string cardHolderName, DateTime expiration, int orderId)
{
var existingPayment = _paymentMethods.Where(p => p.IsEqualTo(cardTypeId, cardNumber, expiration))
.SingleOrDefault();
if (existingPayment != null)
{
AddDomainEvent(new BuyerAndPaymentMethodVerifiedDomainEvent(this, existingPayment, orderId));
2017-04-17 12:28:12 +02:00
return existingPayment;
}
else
{
var payment = new PaymentMethod(cardTypeId, alias, cardNumber, securityNumber, cardHolderName, expiration);
_paymentMethods.Add(payment);
2017-04-17 12:28:12 +02:00
AddDomainEvent(new BuyerAndPaymentMethodVerifiedDomainEvent(this, payment, orderId));
2017-04-17 12:28:12 +02:00
return payment;
}
2017-03-14 18:02:28 +01:00
}
}
}