
* Removed old macaw and material * Add trpc router that fetches shop address info * Config page layout with header and address * display default addres * Draft channels list * add v2 config model * Render address overrides * Render address overrides ui * connect address form * reset address form * implement removing conifg * connect dashboard sites * update webhook * Add ConfigV1 to ConfigV2 transformer * Cleanup v1 router, abstract v2 * Implement runtime migrations * Implement migration service in controllers * test for configuration service * test for app cofnig * draft test for router * refactor webhook * Unify Address schema to single one * Extractr data fetching from form
54 lines
1.8 KiB
TypeScript
54 lines
1.8 KiB
TypeScript
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;
|
|
}
|
|
}
|