public async Task HandleAsync(AddPaymentMethod @event, ICorrelationContext context) { Customer buyer = await _buyerRepo.GetAsync(@event.CustomerId); if (buyer is null) { throw new MedParkException("customer_does_not_exist", $"Buyer {@event.CustomerId} does not exist."); } CustomerPaymentMethod newPaymentMethod = new CustomerPaymentMethod(@event.Id); newPaymentMethod.SetCustomer(@event.CustomerId); OrderPaymentType paymentType = (OrderPaymentType)@event.PaymentTypeId; PaymentType payType = await _paymentTypeRepo.GetAsync(x => x.Name == paymentType.ToString().Replace("_", " ")); if (payType is null) { throw new MedParkException("payment_type_does_not_exist", $"Payment type {@event.PaymentTypeId} does not exist."); } newPaymentMethod.SetPaymentType(payType.Id); switch (paymentType) { case OrderPaymentType.Online: { //Online payment method, set card details newPaymentMethod.SetOnlinePaymentDetails(@event.PaymentCardType, @event.PaymentCardNumber, @event.PaymentCardExpiry, @event.PaymentCardSecurityCode); } break; } newPaymentMethod.Use(); //Save the payment method for the customer await _paymentMethodsRepo.AddAsync(newPaymentMethod); }