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,
|
OrderCreatedEventSubscriptionFragment,
|
||||||
OrderStatus,
|
OrderStatus,
|
||||||
UntypedOrderCreatedSubscriptionDocument,
|
UntypedOrderCreatedSubscriptionDocument,
|
||||||
UpdateMetadataDocument,
|
|
||||||
UpdateMetadataMutation,
|
|
||||||
UpdateMetadataMutationVariables,
|
|
||||||
} from "../../../../generated/graphql";
|
} from "../../../../generated/graphql";
|
||||||
import { saleorApp } from "../../../../saleor-app";
|
import { saleorApp } from "../../../../saleor-app";
|
||||||
import { createLogger } from "../../../lib/logger";
|
import { createLogger } from "../../../lib/logger";
|
||||||
import { getActiveConnectionService } from "../../../modules/taxes/get-active-connection-service";
|
import { getActiveConnectionService } from "../../../modules/taxes/get-active-connection-service";
|
||||||
import { Client } from "urql";
|
|
||||||
import { WebhookResponse } from "../../../modules/app/webhook-response";
|
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 { createGraphQLClient } from "@saleor/apps-shared";
|
||||||
|
import { OrderMetadataManager } from "../../../modules/app/order-metadata-manager";
|
||||||
|
|
||||||
export const config = {
|
export const config = {
|
||||||
api: {
|
api: {
|
||||||
|
@ -34,35 +30,6 @@ export const orderCreatedAsyncWebhook = new SaleorAsyncWebhook<OrderCreatedPaylo
|
||||||
webhookPath: "/api/webhooks/order-created",
|
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) => {
|
export default orderCreatedAsyncWebhook.createHandler(async (req, res, ctx) => {
|
||||||
const logger = createLogger({ event: ctx.event });
|
const logger = createLogger({ event: ctx.event });
|
||||||
const { payload, authData } = ctx;
|
const { payload, authData } = ctx;
|
||||||
|
@ -95,7 +62,9 @@ export default orderCreatedAsyncWebhook.createHandler(async (req, res, ctx) => {
|
||||||
token,
|
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");
|
logger.info("Updated order metadata with externalId");
|
||||||
|
|
||||||
return webhookResponse.success();
|
return webhookResponse.success();
|
||||||
|
|
Loading…
Reference in a new issue