From d2a96869376f7d51454b76b804c7a9ae939fa8ad Mon Sep 17 00:00:00 2001 From: Adrian Pilarczyk Date: Tue, 1 Aug 2023 10:24:16 +0200 Subject: [PATCH] refactor: :recycle: split up webhook response --- .../taxes/src/modules/app/webhook-response.ts | 42 +++++++++++-------- .../api/webhooks/checkout-calculate-taxes.ts | 5 --- .../api/webhooks/order-calculate-taxes.ts | 5 --- 3 files changed, 24 insertions(+), 28 deletions(-) diff --git a/apps/taxes/src/modules/app/webhook-response.ts b/apps/taxes/src/modules/app/webhook-response.ts index 57ac629..d915ad5 100644 --- a/apps/taxes/src/modules/app/webhook-response.ts +++ b/apps/taxes/src/modules/app/webhook-response.ts @@ -2,35 +2,41 @@ import { NextApiResponse } from "next"; import { createLogger, Logger } from "../../lib/logger"; +class WebhookErrorResolver { + private logger: Logger; + constructor() { + this.logger = createLogger({ event: "WebhookErrorResolver" }); + } + + private resolveError(error: unknown) { + if (error instanceof Error) { + this.logger.error(error.stack, "Unexpected error caught:"); + return error.message; + } + return "Internal server error"; + } + + resolve(error: unknown) { + return this.resolveError(error); + } +} + export class WebhookResponse { private logger: Logger; constructor(private res: NextApiResponse) { this.logger = createLogger({ event: "WebhookResponse" }); } - private returnSuccess(data?: unknown) { - this.logger.debug({ data }, "Responding to Saleor with data:"); - return this.res.status(200).json(data ?? {}); - } + error(error: unknown) { + const errorResolver = new WebhookErrorResolver(); + const errorMessage = errorResolver.resolve(error); - private returnError(errorMessage: string) { this.logger.debug({ errorMessage }, "Responding to Saleor with error:"); + return this.res.status(500).json({ error: errorMessage }); } - private resolveError(error: unknown) { - if (error instanceof Error) { - this.logger.error(error.stack, "Unexpected error caught:"); - return this.returnError(error.message); - } - return this.returnError("Internal server error"); - } - - error(error: unknown) { - return this.resolveError(error); - } - success(data?: unknown) { - return this.returnSuccess(data); + return this.res.status(200).json(data ?? {}); } } diff --git a/apps/taxes/src/pages/api/webhooks/checkout-calculate-taxes.ts b/apps/taxes/src/pages/api/webhooks/checkout-calculate-taxes.ts index 3987f59..af9bd3e 100644 --- a/apps/taxes/src/pages/api/webhooks/checkout-calculate-taxes.ts +++ b/apps/taxes/src/pages/api/webhooks/checkout-calculate-taxes.ts @@ -46,12 +46,7 @@ export default checkoutCalculateTaxesSyncWebhook.createHandler(async (req, res, try { verifyCalculateTaxesPayload(payload); logger.debug("Payload validated succesfully"); - } catch (error) { - logger.debug("Payload validation failed"); - return webhookResponse.error(error); - } - try { const appMetadata = payload.recipient?.privateMetadata ?? []; const channelSlug = payload.taxBase.channel.slug; const activeConnectionService = getActiveConnectionService( diff --git a/apps/taxes/src/pages/api/webhooks/order-calculate-taxes.ts b/apps/taxes/src/pages/api/webhooks/order-calculate-taxes.ts index ec54daf..e8ed2ed 100644 --- a/apps/taxes/src/pages/api/webhooks/order-calculate-taxes.ts +++ b/apps/taxes/src/pages/api/webhooks/order-calculate-taxes.ts @@ -46,12 +46,7 @@ export default orderCalculateTaxesSyncWebhook.createHandler(async (req, res, ctx try { verifyCalculateTaxesPayload(payload); logger.debug("Payload validated succesfully"); - } catch (error) { - logger.debug("Payload validation failed"); - return webhookResponse.error(error); - } - try { const appMetadata = payload.recipient?.privateMetadata ?? []; const channelSlug = payload.taxBase.channel.slug; const activeConnectionService = getActiveConnectionService(