From 56bc840b88014a8868711e52e6378914bc478430 Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Fri, 24 Jun 2016 14:11:28 +0100 Subject: [PATCH] WIP: fix up error handling and account for possibility of account already existing. --- .../Subscription/RecurlyWrapper.coffee | 49 ++++++++++++++++--- 1 file changed, 43 insertions(+), 6 deletions(-) diff --git a/services/web/app/coffee/Features/Subscription/RecurlyWrapper.coffee b/services/web/app/coffee/Features/Subscription/RecurlyWrapper.coffee index edf4dc8841..75d1f1667a 100644 --- a/services/web/app/coffee/Features/Subscription/RecurlyWrapper.coffee +++ b/services/web/app/coffee/Features/Subscription/RecurlyWrapper.coffee @@ -12,7 +12,32 @@ module.exports = RecurlyWrapper = _createPaypalSubscription: (user, subscriptionDetails, recurly_token_id, callback) -> logger.log {user_id: user._id, recurly_token_id}, "starting process of creating paypal subscription" Async.waterfall([ - (next) -> # create account + (next) -> # check if account exists + logger.log {user_id: user._id, recurly_token_id}, "checking if recurly account exists for user" + RecurlyWrapper.apiRequest({ + url: "accounts/#{user._id}" + method: "GET" + }, (error, response, responseBody) -> + if error + logger.error {error, user_id: user._id, recurly_token_id}, "error response from recurly while checking account" + return next(error) + result = {userExists: true} + if response.statusCode == 404 + result.userExists = false + return next(null, result) + logger.log {user_id: user._id, recurly_token_id}, "user appears to exist in recurly" + RecurlyWrapper._parseAccountXml responseBody, (err, account) -> + if err + logger.error {err, user_id: user._id, recurly_token_id}, "error parsing account" + return next(err) + result.account = account + return next(null, result) + ) + + , (result, next) -> # create account + if !result.userExists + logger.log {user_id: user._id, recurly_token_id}, "user already exists in recurly" + return next(null, result) logger.log {user_id: user._id, recurly_token_id}, "creating user in recurly" address = subscriptionDetails.address if !address @@ -38,14 +63,17 @@ module.exports = RecurlyWrapper = method : "POST" body : requestBody }, (error, response, responseBody) => - return next(error) if error? + if error + logger.error {error, user_id: user._id, recurly_token_id}, "error response from recurly while creating account" + return next(error) RecurlyWrapper._parseAccountXml responseBody, (err, account) -> if err logger.error {err, user_id: user._id, recurly_token_id}, "error creating account" return next(err) - result = {account} + result.account = account return next(null, result) ) + , (result, next) -> # create billing info logger.log {user_id: user._id, recurly_token_id}, "creating billing info in recurly" accountCode = result?.account?.account_code @@ -61,7 +89,9 @@ module.exports = RecurlyWrapper = method: "POST" body: requestBody }, (error, response, responseBody) => - return next(error) if error? + if error + logger.error {error, user_id: user._id, recurly_token_id}, "error response from recurly while creating billing info" + return next(error) RecurlyWrapper._parseBillingInfoXml responseBody, (err, billingInfo) -> if err logger.error {err, user_id: user._id, accountCode, recurly_token_id}, "error creating billing info" @@ -69,6 +99,7 @@ module.exports = RecurlyWrapper = result.billingInfo = billingInfo return next(null, result) ) + , (result, next) -> # set address logger.log {user_id: user._id, recurly_token_id}, "setting billing address in recurly" accountCode = result?.account?.account_code @@ -92,7 +123,9 @@ module.exports = RecurlyWrapper = method: "PUT" body: requestBody }, (error, response, responseBody) => - return next(error) if error? + if error + logger.error {error, user_id: user._id, recurly_token_id}, "error response from recurly while setting address" + return next(error) RecurlyWrapper._parseBillingInfoXml responseBody, (err, billingInfo) -> if err logger.error {err, user_id: user._id, recurly_token_id}, "error updating billing info" @@ -100,6 +133,7 @@ module.exports = RecurlyWrapper = result.billingInfo = billingInfo return next(null, result) ) + , (result, next) -> # create subscription logger.log {user_id: user._id, recurly_token_id}, "creating subscription in recurly" requestBody = """ @@ -117,7 +151,9 @@ module.exports = RecurlyWrapper = method : "POST" body : requestBody }, (error, response, responseBody) => - return next(error) if error? + if error + logger.error {error, user_id: user._id, recurly_token_id}, "error response from recurly while creating subscription" + return next(error) RecurlyWrapper._parseSubscriptionXml responseBody, (err, subscription) -> if err logger.error {err, user_id: user._id, recurly_token_id}, "error creating subscription" @@ -125,6 +161,7 @@ module.exports = RecurlyWrapper = result.subscription = subscription return next(null, result) ) + ], (err, result) -> if err logger.error {err, user_id: user._id, recurly_token_id}, "error in paypal subscription creation process"