2023-03-09 08:14:29 +00:00
|
|
|
import { SettingsManager } from "@saleor/app-sdk/settings-manager";
|
2023-05-31 16:08:43 +00:00
|
|
|
import { SmtpConfig } from "./smtp-config-schema";
|
2023-06-06 09:51:59 +00:00
|
|
|
import { SmtpPrivateMetadataManagerV2 } from "./smtp-metadata-manager-v2";
|
|
|
|
import { smtpConfigMigrationV1ToV2 } from "./migrations/smtp-config-migration-v1-to-v2";
|
|
|
|
import { createLogger } from "@saleor/apps-shared";
|
|
|
|
|
|
|
|
const logger = createLogger({
|
2023-06-16 09:07:17 +00:00
|
|
|
name: "SmtpPrivateMetadataManager",
|
2023-06-06 09:51:59 +00:00
|
|
|
});
|
2023-03-09 08:14:29 +00:00
|
|
|
|
2023-05-31 16:08:43 +00:00
|
|
|
export class SmtpPrivateMetadataManager {
|
2023-06-06 09:51:59 +00:00
|
|
|
private metadataKey = "smtp-config-v2";
|
2023-03-09 08:14:29 +00:00
|
|
|
|
|
|
|
constructor(private metadataManager: SettingsManager, private saleorApiUrl: string) {}
|
|
|
|
|
2023-06-06 09:51:59 +00:00
|
|
|
async getConfig() {
|
|
|
|
logger.debug("Fetching config in the current version");
|
|
|
|
|
|
|
|
const currentVersionManager = new SmtpPrivateMetadataManagerV2(
|
|
|
|
this.metadataManager,
|
|
|
|
this.saleorApiUrl
|
|
|
|
);
|
|
|
|
|
|
|
|
const currentVersionConfig = await currentVersionManager.getConfig();
|
|
|
|
|
|
|
|
if (currentVersionConfig) {
|
|
|
|
// We have the current version, no need to migrate so we can return it
|
|
|
|
return currentVersionConfig;
|
|
|
|
}
|
|
|
|
|
|
|
|
logger.debug("No config in the current version, trying to migrate from v1");
|
|
|
|
// TODO: MIGRATION CODE FROM CONFIG VERSION V1. REMOVE AFTER MIGRATION
|
|
|
|
const migratedSchema = await smtpConfigMigrationV1ToV2({
|
|
|
|
saleorApiUrl: this.saleorApiUrl,
|
|
|
|
settingsManager: this.metadataManager,
|
2023-03-09 08:14:29 +00:00
|
|
|
});
|
2023-06-06 09:51:59 +00:00
|
|
|
|
|
|
|
return migratedSchema;
|
2023-03-09 08:14:29 +00:00
|
|
|
}
|
|
|
|
|
2023-05-31 16:08:43 +00:00
|
|
|
setConfig(config: SmtpConfig): Promise<void> {
|
2023-03-09 08:14:29 +00:00
|
|
|
return this.metadataManager.set({
|
|
|
|
key: this.metadataKey,
|
|
|
|
value: JSON.stringify(config),
|
|
|
|
domain: this.saleorApiUrl,
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|