refactor: ♻️ extract order-metadata-manager
This commit is contained in:
parent
8e33f59e0c
commit
1a41ca7684
2 changed files with 42 additions and 35 deletions
38
apps/taxes/src/modules/app/order-metadata-manager.ts
Normal file
38
apps/taxes/src/modules/app/order-metadata-manager.ts
Normal file
|
@ -0,0 +1,38 @@
|
|||
import {
|
||||
UpdateMetadataDocument,
|
||||
UpdateMetadataMutation,
|
||||
UpdateMetadataMutationVariables,
|
||||
} from "../../../generated/graphql";
|
||||
import { Client } from "urql";
|
||||
import { PROVIDER_ORDER_ID_KEY } from "../avatax/order-fulfilled/avatax-order-fulfilled-payload-transformer";
|
||||
|
||||
export class OrderMetadataManager {
|
||||
private privateOrderIdKey = PROVIDER_ORDER_ID_KEY;
|
||||
|
||||
constructor(private client: Client) {}
|
||||
|
||||
/**
|
||||
* We need to store the provider order id in the Saleor order metadata so that we can
|
||||
* update the provider order when the Saleor order is fulfilled.
|
||||
*/
|
||||
async updateOrderMetadataWithExternalId(orderId: string, externalId: string) {
|
||||
const variables: UpdateMetadataMutationVariables = {
|
||||
id: orderId,
|
||||
input: [
|
||||
{
|
||||
key: this.privateOrderIdKey,
|
||||
value: externalId,
|
||||
},
|
||||
],
|
||||
};
|
||||
const { error } = await this.client
|
||||
.mutation<UpdateMetadataMutation>(UpdateMetadataDocument, variables)
|
||||
.toPromise();
|
||||
|
||||
if (error) {
|
||||
throw error;
|
||||
}
|
||||
|
||||
return { ok: true };
|
||||
}
|
||||
}
|
|
@ -3,17 +3,13 @@ import {
|
|||
OrderCreatedEventSubscriptionFragment,
|
||||
OrderStatus,
|
||||
UntypedOrderCreatedSubscriptionDocument,
|
||||
UpdateMetadataDocument,
|
||||
UpdateMetadataMutation,
|
||||
UpdateMetadataMutationVariables,
|
||||
} from "../../../../generated/graphql";
|
||||
import { saleorApp } from "../../../../saleor-app";
|
||||
import { createLogger } from "../../../lib/logger";
|
||||
import { getActiveConnectionService } from "../../../modules/taxes/get-active-connection-service";
|
||||
import { Client } from "urql";
|
||||
import { WebhookResponse } from "../../../modules/app/webhook-response";
|
||||
import { PROVIDER_ORDER_ID_KEY } from "../../../modules/avatax/order-fulfilled/avatax-order-fulfilled-payload-transformer";
|
||||
import { createGraphQLClient } from "@saleor/apps-shared";
|
||||
import { OrderMetadataManager } from "../../../modules/app/order-metadata-manager";
|
||||
|
||||
export const config = {
|
||||
api: {
|
||||
|
@ -34,35 +30,6 @@ export const orderCreatedAsyncWebhook = new SaleorAsyncWebhook<OrderCreatedPaylo
|
|||
webhookPath: "/api/webhooks/order-created",
|
||||
});
|
||||
|
||||
/**
|
||||
* We need to store the provider order id in the Saleor order metadata so that we can
|
||||
* update the provider order when the Saleor order is fulfilled.
|
||||
*/
|
||||
async function updateOrderMetadataWithExternalId(
|
||||
client: Client,
|
||||
orderId: string,
|
||||
externalId: string
|
||||
) {
|
||||
const variables: UpdateMetadataMutationVariables = {
|
||||
id: orderId,
|
||||
input: [
|
||||
{
|
||||
key: PROVIDER_ORDER_ID_KEY,
|
||||
value: externalId,
|
||||
},
|
||||
],
|
||||
};
|
||||
const { error } = await client
|
||||
.mutation<UpdateMetadataMutation>(UpdateMetadataDocument, variables)
|
||||
.toPromise();
|
||||
|
||||
if (error) {
|
||||
throw error;
|
||||
}
|
||||
|
||||
return { ok: true };
|
||||
}
|
||||
|
||||
export default orderCreatedAsyncWebhook.createHandler(async (req, res, ctx) => {
|
||||
const logger = createLogger({ event: ctx.event });
|
||||
const { payload, authData } = ctx;
|
||||
|
@ -95,7 +62,9 @@ export default orderCreatedAsyncWebhook.createHandler(async (req, res, ctx) => {
|
|||
token,
|
||||
});
|
||||
|
||||
await updateOrderMetadataWithExternalId(client, payload.order.id, createdOrder.id);
|
||||
const orderMetadataManager = new OrderMetadataManager(client);
|
||||
|
||||
await orderMetadataManager.updateOrderMetadataWithExternalId(payload.order.id, createdOrder.id);
|
||||
logger.info("Updated order metadata with externalId");
|
||||
|
||||
return webhookResponse.success();
|
||||
|
|
Loading…
Reference in a new issue