saleor-apps-redis_apl/apps/invoices/src/modules/app-configuration/schema-v2/config-v1-to-v2-migration.service.ts

55 lines
1.8 KiB
TypeScript
Raw Normal View History

import { PrivateMetadataAppConfiguratorV1 } from "../schema-v1/app-configurator";
import { createSettingsManager, SimpleGraphqlClient } from "../metadata-manager";
import { AppConfigV2 } from "./app-config";
import { ConfigV1ToV2Transformer } from "./config-v1-to-v2-transformer";
import { AppConfigV2MetadataManager } from "./app-config-v2-metadata-manager";
import { SettingsManager } from "@saleor/app-sdk/settings-manager";
export class ConfigV1ToV2MigrationService {
settingsManager: SettingsManager;
configMetadataManager: AppConfigV2MetadataManager;
metadataV1AppConfigurator: PrivateMetadataAppConfiguratorV1;
constructor(private client: SimpleGraphqlClient, private saleorApiUrl: string) {
this.settingsManager = createSettingsManager(client);
this.configMetadataManager = new AppConfigV2MetadataManager(this.settingsManager);
this.metadataV1AppConfigurator = new PrivateMetadataAppConfiguratorV1(
this.settingsManager,
this.saleorApiUrl
);
}
async migrate(beforeSave?: (config: AppConfigV2) => void): Promise<AppConfigV2> {
const v1Config = await this.metadataV1AppConfigurator.getConfig();
/**
* If no v1 config, it means clean install - return pure config
*/
if (!v1Config) {
const pureConfig = new AppConfigV2();
if (beforeSave) {
beforeSave(pureConfig);
}
await this.configMetadataManager.set(pureConfig.serialize());
return pureConfig;
}
/**
* Otherwise, transform v1 config to v2 and save it
*/
const transformer = new ConfigV1ToV2Transformer();
const appConfigV2FromV1 = transformer.transform(v1Config);
if (beforeSave) {
beforeSave(appConfigV2FromV1);
}
await this.configMetadataManager.set(appConfigV2FromV1.serialize());
return appConfigV2FromV1;
}
}