feat: ✨ improve migration scripts visibility (#918)
* feat: ✨ add emojis * refactor: 🚚 migration file
This commit is contained in:
parent
783bd5ec55
commit
4a635620c4
5 changed files with 31 additions and 28 deletions
|
@ -1,5 +1,4 @@
|
||||||
/* eslint-disable multiline-comment-style */
|
/* eslint-disable multiline-comment-style */
|
||||||
import { orderConfirmedAsyncWebhook } from "../../src/pages/api/webhooks/order-confirmed";
|
|
||||||
import { AppWebhookMigrator } from "./app-webhook-migrator";
|
import { AppWebhookMigrator } from "./app-webhook-migrator";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -10,18 +9,20 @@ export async function migrateTaxes(webhookMigrator: AppWebhookMigrator) {
|
||||||
// Migration plan:
|
// Migration plan:
|
||||||
// 1st step
|
// 1st step
|
||||||
// 1. Create new ORDER_CONFIRMED webhooks for each Taxes App.
|
// 1. Create new ORDER_CONFIRMED webhooks for each Taxes App.
|
||||||
await webhookMigrator.registerWebhookIfItDoesntExist(orderConfirmedAsyncWebhook);
|
// await webhookMigrator.registerWebhookIfItDoesntExist(orderConfirmedAsyncWebhook);
|
||||||
|
//
|
||||||
// 2. To confirm if everything is working as expected, we can get all webhooks for apps and check if the ORDER_CONFIRMED webhooks were created.
|
// 2. To confirm if everything is working as expected, we can get all webhooks for apps and check if the ORDER_CONFIRMED webhooks were created.
|
||||||
// await webhookMigrator.getAppWebhooks();
|
// await webhookMigrator.getAppWebhooks();
|
||||||
|
//
|
||||||
// 3. If something went wrong, we can roll back the migration by uncommenting this line:
|
// 3. If something went wrong, we can roll back the migration by uncommenting this line:
|
||||||
// await webhookMigrator.DANGEROUS_DELETE_APP_WEBHOOK_BY_NAME(orderConfirmedAsyncWebhook.name);
|
// await webhookMigrator.DANGEROUS_DELETE_APP_WEBHOOK_BY_NAME(orderConfirmedAsyncWebhook.name);
|
||||||
// It will delete the ORDER_CONFIRMED webhooks created above.
|
// It will delete the ORDER_CONFIRMED webhooks created above.
|
||||||
|
//
|
||||||
// 2nd step (after two weeks)
|
// 2nd step (after two weeks)
|
||||||
// 1. Comment the 1st step code above.
|
// 1. Comment the 1st step code above.
|
||||||
// 2. Delete the ORDER_CREATED and ORDER_FULFILLED webhooks by uncommenting this line:
|
// 2. Delete the ORDER_CREATED and ORDER_FULFILLED webhooks by uncommenting this line:
|
||||||
// await webhookMigrator.DANGEROUS_DELETE_APP_WEBHOOK_BY_NAME("OrderCreated");
|
// await webhookMigrator.DANGEROUS_DELETE_APP_WEBHOOK_BY_NAME("OrderCreated");
|
||||||
// await webhookMigrator.DANGEROUS_DELETE_APP_WEBHOOK_BY_NAME("OrderFulfilled");
|
// await webhookMigrator.DANGEROUS_DELETE_APP_WEBHOOK_BY_NAME("OrderFulfilled");
|
||||||
|
//
|
||||||
|
// Migrations completed ✅. The file remains as an artefact.
|
||||||
}
|
}
|
|
@ -24,7 +24,7 @@ export class AppWebhookMigrator {
|
||||||
appId: string;
|
appId: string;
|
||||||
appWebhookRepository: AppWebhookRepository;
|
appWebhookRepository: AppWebhookRepository;
|
||||||
},
|
},
|
||||||
{ mode }: AppWebhookMigratorOptions
|
{ mode }: AppWebhookMigratorOptions,
|
||||||
) {
|
) {
|
||||||
this.appWebhookRepository = appWebhookRepository;
|
this.appWebhookRepository = appWebhookRepository;
|
||||||
|
|
||||||
|
@ -56,22 +56,22 @@ export class AppWebhookMigrator {
|
||||||
}
|
}
|
||||||
|
|
||||||
private async deleteWebhookById(webhookId: string) {
|
private async deleteWebhookById(webhookId: string) {
|
||||||
console.log(`Webhook ${webhookId} will be deleted`);
|
console.log(`⏳ Webhook ${webhookId} will be deleted`);
|
||||||
|
|
||||||
if (this.mode === "migrate") {
|
if (this.mode === "migrate") {
|
||||||
await this.appWebhookRepository.delete(webhookId);
|
await this.appWebhookRepository.delete(webhookId);
|
||||||
|
|
||||||
console.log(`Webhook ${webhookId} deleted`);
|
console.log(`✅ Webhook ${webhookId} deleted`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async disableWebhookById(webhookId: string) {
|
private async disableWebhookById(webhookId: string) {
|
||||||
console.log(`Webhook ${webhookId} will be disabled`);
|
console.log(`⏳ Webhook ${webhookId} will be disabled`);
|
||||||
|
|
||||||
if (this.mode === "migrate") {
|
if (this.mode === "migrate") {
|
||||||
await this.appWebhookRepository.disable(webhookId);
|
await this.appWebhookRepository.disable(webhookId);
|
||||||
|
|
||||||
console.log(`Webhook ${webhookId} disabled`);
|
console.log(`✅ Webhook ${webhookId} disabled`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -82,7 +82,7 @@ export class AppWebhookMigrator {
|
||||||
async getAppWebhooks() {
|
async getAppWebhooks() {
|
||||||
const webhooks = await this.appWebhookRepository.getAll();
|
const webhooks = await this.appWebhookRepository.getAll();
|
||||||
|
|
||||||
console.log(`Webhooks for app ${this.appId}: `, webhooks);
|
console.log(`📖 Webhooks for app ${this.appId}: `, webhooks);
|
||||||
|
|
||||||
return webhooks;
|
return webhooks;
|
||||||
}
|
}
|
||||||
|
@ -93,7 +93,7 @@ export class AppWebhookMigrator {
|
||||||
const webhook = webhooks.find((webhook) => webhook.name === webhookName);
|
const webhook = webhooks.find((webhook) => webhook.name === webhookName);
|
||||||
|
|
||||||
if (!webhook) {
|
if (!webhook) {
|
||||||
console.log(`Webhook ${webhookName} not found`);
|
console.log(`🚧 Webhook ${webhookName} not found`);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -111,7 +111,7 @@ export class AppWebhookMigrator {
|
||||||
const webhook = webhooks.find((webhook) => webhook.name === webhookName);
|
const webhook = webhooks.find((webhook) => webhook.name === webhookName);
|
||||||
|
|
||||||
if (!webhook) {
|
if (!webhook) {
|
||||||
console.log(`Webhook ${webhookName} not found`);
|
console.log(`🚧 Webhook ${webhookName} not found`);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -130,16 +130,16 @@ export class AppWebhookMigrator {
|
||||||
const webhookExists = webhooks.some((webhook) => webhook.name === webhookHandler.name);
|
const webhookExists = webhooks.some((webhook) => webhook.name === webhookHandler.name);
|
||||||
|
|
||||||
if (webhookExists) {
|
if (webhookExists) {
|
||||||
console.log(`Webhook ${webhookHandler.name} already exists`);
|
console.log(`🚧 Webhook ${webhookHandler.name} already exists`);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(`Webhook ${webhookHandler.name} will be registered`);
|
console.log(`⏳ Webhook ${webhookHandler.name} will be registered`);
|
||||||
|
|
||||||
if (this.mode === "migrate") {
|
if (this.mode === "migrate") {
|
||||||
await this.registerWebhookFromHandler(webhookHandler);
|
await this.registerWebhookFromHandler(webhookHandler);
|
||||||
console.log(`Webhook ${webhookHandler.name} registered`);
|
console.log(`✅ Webhook ${webhookHandler.name} registered`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -151,7 +151,7 @@ export class AppWebhookMigrator {
|
||||||
*/
|
*/
|
||||||
async rollbackWebhookMigrations(
|
async rollbackWebhookMigrations(
|
||||||
prevWebhookName: string,
|
prevWebhookName: string,
|
||||||
nextWebhookHandler: SaleorSyncWebhook | SaleorAsyncWebhook
|
nextWebhookHandler: SaleorSyncWebhook | SaleorAsyncWebhook,
|
||||||
) {
|
) {
|
||||||
const webhooks = await this.appWebhookRepository.getAll();
|
const webhooks = await this.appWebhookRepository.getAll();
|
||||||
|
|
||||||
|
@ -181,6 +181,6 @@ export function createAppWebhookMigrator(env: AuthData, options: AppWebhookMigra
|
||||||
appId: env.appId,
|
appId: env.appId,
|
||||||
appWebhookRepository,
|
appWebhookRepository,
|
||||||
},
|
},
|
||||||
options
|
options,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import { createGraphQLClient } from "@saleor/apps-shared";
|
|
||||||
import { Client, gql } from "urql";
|
import { Client, gql } from "urql";
|
||||||
import {
|
import {
|
||||||
CreateAppWebhookDocument,
|
CreateAppWebhookDocument,
|
||||||
|
@ -95,7 +94,7 @@ export class AppWebhookRepository {
|
||||||
.toPromise();
|
.toPromise();
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
console.log("Was not able to fetch app webhooks", error.message);
|
console.log("❌ Was not able to fetch app webhooks", error.message);
|
||||||
|
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
|
@ -109,7 +108,10 @@ export class AppWebhookRepository {
|
||||||
.toPromise();
|
.toPromise();
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
console.log(`Was not able to create webhook for the app ${variables.appId}`, error.message);
|
console.log(
|
||||||
|
`❌ Was not able to create webhook for the app ${variables.appId}`,
|
||||||
|
error.message,
|
||||||
|
);
|
||||||
|
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
|
@ -125,7 +127,7 @@ export class AppWebhookRepository {
|
||||||
.toPromise();
|
.toPromise();
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
console.log(`Was not able to disable webhook ${id}`, error.message);
|
console.log(`❌ Was not able to disable webhook ${id}`, error.message);
|
||||||
|
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
|
@ -141,7 +143,7 @@ export class AppWebhookRepository {
|
||||||
.toPromise();
|
.toPromise();
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
console.log(`Was not able to enable webhook ${id}`, error.message);
|
console.log(`❌ Was not able to enable webhook ${id}`, error.message);
|
||||||
|
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
|
@ -159,7 +161,7 @@ export class AppWebhookRepository {
|
||||||
console.log(data, error);
|
console.log(data, error);
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
console.log(`Was not able to delete webhook ${id}`, error.message);
|
console.log(`❌ Was not able to delete webhook ${id}`, error.message);
|
||||||
|
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
import * as dotenv from "dotenv";
|
import * as dotenv from "dotenv";
|
||||||
import { createAppWebhookMigrator } from "./app-webhook-migrator";
|
import { createAppWebhookMigrator } from "./app-webhook-migrator";
|
||||||
import { fetchCloudAplEnvs, verifyRequiredEnvs } from "./migration-utils";
|
import { fetchCloudAplEnvs, verifyRequiredEnvs } from "./migration-utils";
|
||||||
import { migrateTaxes } from "./taxes-migration";
|
import { migrateTaxes } from "./1.13-taxes-migration";
|
||||||
|
|
||||||
dotenv.config();
|
dotenv.config();
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ const runMigration = async () => {
|
||||||
|
|
||||||
await migrateTaxes(webhookMigrator);
|
await migrateTaxes(webhookMigrator);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log("Error while migrating webhook. Continuing with the next app.");
|
console.log("⏩ Error while migrating webhook. Continuing with the next app.");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
import * as dotenv from "dotenv";
|
import * as dotenv from "dotenv";
|
||||||
import { createAppWebhookMigrator } from "./app-webhook-migrator";
|
import { createAppWebhookMigrator } from "./app-webhook-migrator";
|
||||||
import { fetchCloudAplEnvs, verifyRequiredEnvs } from "./migration-utils";
|
import { fetchCloudAplEnvs, verifyRequiredEnvs } from "./migration-utils";
|
||||||
import { migrateTaxes } from "./taxes-migration";
|
import { migrateTaxes } from "./1.13-taxes-migration";
|
||||||
|
|
||||||
dotenv.config();
|
dotenv.config();
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ const runReport = async () => {
|
||||||
|
|
||||||
await migrateTaxes(webhookMigrator);
|
await migrateTaxes(webhookMigrator);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log("Error while migrating webhook. Continuing with the next app.");
|
console.log("⏩ Error while migrating webhook. Continuing with the next app.");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue