Example #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);
        }
        /// <summary>
        /// Helper to convert enum to a valid string sent/received in from the API
        /// <returns>String</returns>
        /// </summary>
        public static String OrderPaymentTypeToString(OrderPaymentType value)
        {
            switch (value)
            {
            case OrderPaymentType.Declined: return("0");

            case OrderPaymentType.LegacyAuth: return("1");

            case OrderPaymentType.LegacyCapture: return("2");

            case OrderPaymentType.Auth: return("3");

            case OrderPaymentType.Capture: return("4");

            case OrderPaymentType.AuthCapture: return("5");

            case OrderPaymentType.Refund: return("6");

            case OrderPaymentType.Void: return("7");
            }
            return("");
        }