public async Task <ActionResult> MakePaymentDefault(MakeDefaultBody makeDefaultBody)
        {
            try
            {
                Logger.LogInformation("{Id} is making a {Card} default", makeDefaultBody.UserId, makeDefaultBody.PaymentId);
                await PaymentService.MakeDefault(makeDefaultBody);

                return(Ok());
            }
            catch (Exception e)
            {
                Logger.LogError(e.ToString());
                return(BadRequest(e));
            }
        }
Пример #2
0
        /// <inheritdoc />
        /// <exception cref="UserNotFoundException">Thrown if the user is not found</exception>
        public async Task MakeDefault(MakeDefaultBody makeDefaultBody)
        {
            var userWithPayments =
                await ApplicationContext.Users.Include(x => x.PaymentMethods)
                .FirstOrDefaultAsync(x => x.Id == makeDefaultBody.UserId);

            if (userWithPayments == null)
            {
                throw new UserNotFoundException();
            }

            try
            {
                // set all user's payment methods to not default
                userWithPayments.PaymentMethods.ForEach(p =>
                {
                    p.IsDefault = p.StripeCardId == makeDefaultBody.PaymentId;
                });

                var options = new CustomerUpdateOptions()
                {
                    DefaultSource = makeDefaultBody.PaymentId
                };

                var service = new CustomerService();

                // request customer update to Stripe api
                service.Update(userWithPayments.StripeCustomerId, options);

                await ApplicationContext.SaveChangesAsync();
            }
            catch (Exception e)
            {
                Logger.LogInformation(e.Message);
                throw;
            }
        }