예제 #1
0
        public async Task <InvokeResult> UpdateSubscriptionAsync(Subscription subscription, EntityHeader org, EntityHeader user)
        {
            await AuthorizeAsync(user, org, "updateSubscription", subscription);

            var oldSubscription = await _subscriptionRepo.GetSubscriptionAsync(subscription.Id, true);

            ValidationCheck(subscription, Actions.Update);

            if (oldSubscription.PaymentToken != subscription.PaymentToken)
            {
                if (String.IsNullOrEmpty(oldSubscription.PaymentToken))
                {
                    var result = await _paymentCustomers.CreateCustomerAsync(subscription.Id.ToString(), subscription.PaymentToken);

                    if (!result.Successful)
                    {
                        return(result.ToInvokeResult());
                    }
                    subscription.CustomerId = result.Result;
                }
                else
                {
                    var result = await _paymentCustomers.AddPaymentSource(subscription.CustomerId, subscription.PaymentToken);

                    if (!result.Successful)
                    {
                        return(result.ToInvokeResult());
                    }
                }

                subscription.PaymentTokenStatus = Subscription.PaymentTokenStatus_OK;
                subscription.Status             = Subscription.Status_OK;
                subscription.PaymentTokenDate   = DateTime.UtcNow;
            }

            await _subscriptionRepo.UpdateSubscriptionAsync(subscription);

            return(new InvokeResult());
        }