refactor: ♻️ split up webhook response

This commit is contained in:
Adrian Pilarczyk 2023-08-01 10:24:16 +02:00
parent e4ac0e7827
commit d2a9686937
3 changed files with 24 additions and 28 deletions

View file

@ -2,35 +2,41 @@ import { NextApiResponse } from "next";
import { createLogger, Logger } from "../../lib/logger"; 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 { export class WebhookResponse {
private logger: Logger; private logger: Logger;
constructor(private res: NextApiResponse) { constructor(private res: NextApiResponse) {
this.logger = createLogger({ event: "WebhookResponse" }); this.logger = createLogger({ event: "WebhookResponse" });
} }
private returnSuccess(data?: unknown) { error(error: unknown) {
this.logger.debug({ data }, "Responding to Saleor with data:"); const errorResolver = new WebhookErrorResolver();
return this.res.status(200).json(data ?? {}); const errorMessage = errorResolver.resolve(error);
}
private returnError(errorMessage: string) {
this.logger.debug({ errorMessage }, "Responding to Saleor with error:"); this.logger.debug({ errorMessage }, "Responding to Saleor with error:");
return this.res.status(500).json({ error: errorMessage }); 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) { success(data?: unknown) {
return this.returnSuccess(data); return this.res.status(200).json(data ?? {});
} }
} }

View file

@ -46,12 +46,7 @@ export default checkoutCalculateTaxesSyncWebhook.createHandler(async (req, res,
try { try {
verifyCalculateTaxesPayload(payload); verifyCalculateTaxesPayload(payload);
logger.debug("Payload validated succesfully"); logger.debug("Payload validated succesfully");
} catch (error) {
logger.debug("Payload validation failed");
return webhookResponse.error(error);
}
try {
const appMetadata = payload.recipient?.privateMetadata ?? []; const appMetadata = payload.recipient?.privateMetadata ?? [];
const channelSlug = payload.taxBase.channel.slug; const channelSlug = payload.taxBase.channel.slug;
const activeConnectionService = getActiveConnectionService( const activeConnectionService = getActiveConnectionService(

View file

@ -46,12 +46,7 @@ export default orderCalculateTaxesSyncWebhook.createHandler(async (req, res, ctx
try { try {
verifyCalculateTaxesPayload(payload); verifyCalculateTaxesPayload(payload);
logger.debug("Payload validated succesfully"); logger.debug("Payload validated succesfully");
} catch (error) {
logger.debug("Payload validation failed");
return webhookResponse.error(error);
}
try {
const appMetadata = payload.recipient?.privateMetadata ?? []; const appMetadata = payload.recipient?.privateMetadata ?? [];
const channelSlug = payload.taxBase.channel.slug; const channelSlug = payload.taxBase.channel.slug;
const activeConnectionService = getActiveConnectionService( const activeConnectionService = getActiveConnectionService(