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)); } }
/// <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; } }