Skip to content

Commit 83879c7

Browse files
authored
25595 - Add More Payment Error Handling to Create/Update Org (bcgov#3265)
1 parent 3b3b83b commit 83879c7

File tree

4 files changed

+41
-9
lines changed

4 files changed

+41
-9
lines changed

auth-api/src/auth_api/resources/v1/org.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,11 @@ def post_organization():
154154
return response, status
155155
response, status = OrgService.create_org(request_json, user.identifier).as_dict(), HTTPStatus.CREATED
156156
except BusinessException as exception:
157-
response, status = {"code": exception.code, "message": exception.message}, exception.status_code
157+
response, status = {
158+
"code": exception.code,
159+
"message": exception.message,
160+
"detail": exception.detail,
161+
}, exception.status_code
158162
return response, status
159163

160164

@@ -196,7 +200,11 @@ def put_organization(org_id):
196200
else:
197201
response, status = {"message": "The requested organization could not be found."}, HTTPStatus.NOT_FOUND
198202
except BusinessException as exception:
199-
response, status = {"code": exception.code, "message": exception.message}, exception.status_code
203+
response, status = {
204+
"code": exception.code,
205+
"message": exception.message,
206+
"detail": exception.detail,
207+
}, exception.status_code
200208
return response, status
201209

202210

auth-api/src/auth_api/services/org.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -270,10 +270,20 @@ def _create_payment_settings(
270270

271271
except HTTPError as http_error:
272272
error_payload = http_error.response.json()
273-
error_code = error_payload.get("error", Error.PAYMENT_ACCOUNT_UPSERT_FAILED)
274-
error_message = error_payload.get("error_description", "")
273+
error_code = next(
274+
(error_payload[key] for key in ["error", "code"] if key in error_payload),
275+
Error.PAYMENT_ACCOUNT_UPSERT_FAILED,
276+
)
277+
error_details = next(
278+
(
279+
error_payload[key]
280+
for key in ["error_description", "message", "description", "type"]
281+
if key in error_payload
282+
),
283+
"",
284+
)
275285
logger.error(f"Account create payment Error: {http_error}")
276-
raise BusinessException(error_code, error_message)
286+
raise BusinessException(error_code, error_details)
277287

278288
@staticmethod
279289
def _build_payment_request(org_model: OrgModel, payment_info: dict, payment_method: str, mailing_address, **kwargs):

auth-web/src/components/auth/account-settings/payment/AccountPaymentMethods.vue

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ import {
144144
} from '@/models/Organization'
145145
import { computed, defineComponent, onBeforeUnmount, onMounted, reactive, ref, toRefs, watch } from '@vue/composition-api'
146146
import { BcolProfile } from '@/models/bcol'
147+
import CommonUtils from '@/util/common-util'
147148
import LaunchDarklyService from 'sbc-common-components/src/services/launchdarkly.services'
148149
import ModalDialog from '@/components/auth/common/ModalDialog.vue'
149150
import PaymentMethods from '@/components/auth/common/PaymentMethods.vue'
@@ -419,6 +420,8 @@ export default defineComponent({
419420
return { isValid, createRequestBody }
420421
}
421422
423+
const formatText = CommonUtils.formatSnakeCaseToTitle
424+
422425
async function save () {
423426
state.isBtnSaved = false
424427
state.isLoading = true
@@ -473,11 +476,13 @@ export default defineComponent({
473476
state.errorTitle = 'Error'
474477
switch (error.response.status) {
475478
case 409:
476-
state.errorText = error.response.data.message?.detail || error.response.data.message
477-
break
478479
case 400:
479-
state.errorText = error.response.data.message?.detail || error.response.data.message
480-
state.errorTitle = error.response.data.message?.title || 'Error'
480+
state.errorText = `${formatText(error.response.data.code)}<br>` +
481+
`${formatText(error.response.data.message?.detail) || formatText(error.response.data.detail) || ''}`.trim()
482+
483+
state.errorTitle = formatText(error.response.data.message?.title) ||
484+
formatText(error.response.data.message) ||
485+
'Error'
481486
break
482487
default:
483488
state.errorText = 'An error occurred while attempting to create/update your account.'

auth-web/src/util/common-util.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -383,4 +383,13 @@ export default class CommonUtils {
383383
arrayToSearch.length > 0 ? arrayToSearch[0] : undefined
384384
)
385385
}
386+
387+
static formatSnakeCaseToTitle (text: string): string {
388+
if (!text) return ''
389+
if (!text.includes('_')) return text
390+
return text
391+
.toLowerCase()
392+
.replace(/_/g, ' ')
393+
.replace(/\b\w/g, (char) => char.toUpperCase())
394+
}
386395
}

0 commit comments

Comments
 (0)