示例#1
0
        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);
        }