import { api, log, Initializer } from "actionhero"; import { loadConfigDirectory } from "../modules/configLoaders"; import { getConfigDir } from "../modules/pluginDetails"; import { GrouparooModel } from "../models/GrouparooModel"; import { GrouparooRecord } from "../models/GrouparooRecord"; import { RecordOps } from "../modules/ops/record"; import { CLS } from "../modules/cls"; import { getGrouparooRunMode } from "../modules/runMode"; declare module "actionhero" { export interface Api { codeConfig: { allowLockedModelChanges: boolean; }; } } export class CodeConfig extends Initializer { constructor() { super(); this.name = "codeConfig"; this.loadPriority = 10000; this.startPriority = 10; } async initialize() { api.codeConfig = { allowLockedModelChanges: true, }; } async start() { await CLS.wrap(async () => { const configDir = await getConfigDir( getGrouparooRunMode() === "cli:config" ); const { errors } = await loadConfigDirectory(configDir); if (errors.length > 0) throw new Error("code config error: " + errors.join("; ")); }); api.codeConfig.allowLockedModelChanges = false; // after this point in the Actionhero boot lifecycle, locked models cannot be changed await loadSampleProfiles(); } async stop() {} } async function loadSampleProfiles() { if (getGrouparooRunMode() !== "cli:config") return; const models = await GrouparooModel.findAll(); for (const model of models) { const records = await GrouparooRecord.findAll({ where: { modelId: model.id }, }); if (records.length === 0) continue; log( `importing ${records.length} sample records from the ${model.name} model` ); const responses = await RecordOps.opportunisticallyImportAndUpdateInline( records ); log( `imported ${responses.filter((r) => r.success).length}/${ records.length } sample records from the ${model.name} model` ); for (const { recordId, success, error } of responses) { if (!success) { log( ` - error importing sample record ${recordId} - ${error}`, "error" ); } } } }