import { Rule, SchematicContext, Tree } from '@angular-devkit/schematics'; import { dasherize } from '@angular-devkit/core/src/utils/strings'; import { Model, ModelRelation } from '@vmfvmf/ywtc-lib'; import { error } from "console"; import { getPrjSrd } from '../../router.gen'; export function gen(model: Model): Rule { return (tree: Tree, _context: SchematicContext) => { const callAllScriptsSqlPath = `ywtc-output/${getPrjSrd().prjNDashd}-backend/sql/call-all-scripts.sql`; const updatedCallAllScriptsSql = updateCallAllScriptsSql(getFileContent(tree, callAllScriptsSqlPath)!, model); tree.overwrite(callAllScriptsSqlPath, updatedCallAllScriptsSql); return tree; }; } function getFileContent(tree: Tree, fileName: string) { if (!tree.exists(fileName)) { throw new Error(`File: ${fileName} NOT FOUND.`) } return tree.read(fileName)?.toString(); } function updateCallAllScriptsSql(content: string, model: Model) { const modelName = dasherize(model.name); const jtcAdd = '/*JTCADD*/'; const jtcRels = '/*JTCRELS*/'; if (content.includes(jtcAdd) && content.includes(jtcRels)) { content = content.replace(jtcAdd, `source create-table-${modelName}.sql;\n${jtcAdd}`); model.relations .filter((rel: ModelRelation) => rel.relation === 'ManyToMany') .forEach((rel: ModelRelation) => content = content.replace(jtcRels, `source create-table-rel-${modelName}-${dasherize(rel.toModelName)}.sql;\n${jtcRels}`)); } else { throw error(`The call-all-scripts.sql file is missing ${jtcAdd} or ${jtcRels}!!!`); } return content; }