From 1a1638546559d38d8c98139a55485a92942c2823 Mon Sep 17 00:00:00 2001 From: yevhenii-moroziuk Date: Wed, 11 Feb 2026 17:17:23 +0200 Subject: [PATCH 1/4] HCK-14740: Add logic to generate FKs on table level --- forward_engineering/generateScript.js | 31 ++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/forward_engineering/generateScript.js b/forward_engineering/generateScript.js index 76dcdbc..0d9004b 100644 --- a/forward_engineering/generateScript.js +++ b/forward_engineering/generateScript.js @@ -6,6 +6,9 @@ const { getIndexes } = require('./helpers/indexHelper'); const { buildScript } = require('./helpers/buildScript'); const { getIsPkOrFkConstraintAvailable, getIsConstraintAvailable } = require('./helpers/constraintHelper'); const { setMinify } = require('./helpers/generalHelper'); +const { getForeignKeyStatementsByHashItem } = require('./helpers/foreignKeyHelper'); +const { parseEntities } = require('./helpers/parseEntities'); +const foreignKeyHelper = require('./helpers/foreignKeyHelper'); const generateScript = (data, logger, callback, app) => { try { @@ -17,6 +20,8 @@ const generateScript = (data, logger, callback, app) => { const entityData = data.entityData; const areColumnConstraintsAvailable = getIsConstraintAvailable(data); const isPkOrFkConstraintAvailable = getIsPkOrFkConstraintAvailable(data); + const allCollectionJsonSchema = data.allCollectionJsonSchema ?? []; + const needMinify = _.get(data, 'options.additionalOptions', []).find(option => option.id === 'minify')?.value; setMinify(needMinify); @@ -26,6 +31,30 @@ const generateScript = (data, logger, callback, app) => { callback(null, scripts); return; } + const relationships = data.modelData.find(modelData => 'relationships' in modelData)?.relationships || []; + + const parsedAdditionalEntities = allCollectionJsonSchema.reduce((result, schema) => { + const data = JSON.parse(schema); + result[data.GUID] = data; + return result; + }, {}); + + const foreignKeyHashTable = foreignKeyHelper.getForeignKeyHashTable({ + relationships, + entities: Object.keys(parsedAdditionalEntities), + entityData: { + [jsonSchema.GUID]: entityData, + }, + jsonSchemas: parsedAdditionalEntities, + modelDefinitions, + internalDefinitions, + otherDefinitions: [modelDefinitions, externalDefinitions], + isContainerActivated: entityData[0]?.isActivated, + relatedSchemas: {}, + }); + const foreignKeys = foreignKeyHelper.getForeignKeyStatementsByHashItem( + foreignKeyHashTable[jsonSchema.GUID] ?? {}, + ); callback( null, @@ -36,7 +65,7 @@ const generateScript = (data, logger, callback, app) => { entityData, jsonSchema, [modelDefinitions, internalDefinitions, externalDefinitions], - null, + foreignKeys, areColumnConstraintsAvailable, isPkOrFkConstraintAvailable, ), From 32ce75e6f34337870087fa4c54ab5226a8d56dc7 Mon Sep 17 00:00:00 2001 From: yevhenii-moroziuk Date: Wed, 11 Feb 2026 17:27:24 +0200 Subject: [PATCH 2/4] HCK-14740: Send additional params to generateScript method --- forward_engineering/generateScript.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/forward_engineering/generateScript.js b/forward_engineering/generateScript.js index 0d9004b..c90418e 100644 --- a/forward_engineering/generateScript.js +++ b/forward_engineering/generateScript.js @@ -20,7 +20,7 @@ const generateScript = (data, logger, callback, app) => { const entityData = data.entityData; const areColumnConstraintsAvailable = getIsConstraintAvailable(data); const isPkOrFkConstraintAvailable = getIsPkOrFkConstraintAvailable(data); - const allCollectionJsonSchema = data.allCollectionJsonSchema ?? []; + const allCollectionsJsonSchema = data.allCollectionsJsonSchema ?? []; const needMinify = _.get(data, 'options.additionalOptions', []).find(option => option.id === 'minify')?.value; setMinify(needMinify); @@ -33,7 +33,7 @@ const generateScript = (data, logger, callback, app) => { } const relationships = data.modelData.find(modelData => 'relationships' in modelData)?.relationships || []; - const parsedAdditionalEntities = allCollectionJsonSchema.reduce((result, schema) => { + const parsedEntitiesById = allCollectionsJsonSchema.reduce((result, schema) => { const data = JSON.parse(schema); result[data.GUID] = data; return result; @@ -41,11 +41,11 @@ const generateScript = (data, logger, callback, app) => { const foreignKeyHashTable = foreignKeyHelper.getForeignKeyHashTable({ relationships, - entities: Object.keys(parsedAdditionalEntities), + entities: Object.keys(parsedEntitiesById), entityData: { [jsonSchema.GUID]: entityData, }, - jsonSchemas: parsedAdditionalEntities, + jsonSchemas: parsedEntitiesById, modelDefinitions, internalDefinitions, otherDefinitions: [modelDefinitions, externalDefinitions], From 2e7f4f3d216d87b12f7dbf631ae1394d85944cb8 Mon Sep 17 00:00:00 2001 From: yevhenii-moroziuk Date: Wed, 11 Feb 2026 17:39:17 +0200 Subject: [PATCH 3/4] HCK-14740: Move logic to separate function --- forward_engineering/generateScript.js | 66 ++++++++++++------- .../helpers/foreignKeyHelper.js | 9 +-- 2 files changed, 47 insertions(+), 28 deletions(-) diff --git a/forward_engineering/generateScript.js b/forward_engineering/generateScript.js index c90418e..c227041 100644 --- a/forward_engineering/generateScript.js +++ b/forward_engineering/generateScript.js @@ -10,6 +10,44 @@ const { getForeignKeyStatementsByHashItem } = require('./helpers/foreignKeyHelpe const { parseEntities } = require('./helpers/parseEntities'); const foreignKeyHelper = require('./helpers/foreignKeyHelper'); +const getForeignKeyStatements = ({ + jsonSchema, + entityData, + modelDefinitions, + internalDefinitions, + externalDefinitions, + collectionsJsonSchema = [], + relationships = [], +}) => { + if (!relationships.length || !collectionsJsonSchema.length) { + return null; + } + + const parsedEntitiesById = collectionsJsonSchema.reduce((result, schema) => { + const data = JSON.parse(schema); + result[data.GUID] = data; + return result; + }, {}); + + const foreignKeyHashTable = foreignKeyHelper.getForeignKeyHashTable({ + relationships, + entities: Object.keys(parsedEntitiesById), + entityData: { + [jsonSchema.GUID]: entityData, + }, + jsonSchemas: parsedEntitiesById, + modelDefinitions, + internalDefinitions, + otherDefinitions: [modelDefinitions, externalDefinitions], + isContainerActivated: true, + relatedSchemas: {}, + }); + + return foreignKeyHashTable[jsonSchema.GUID] + ? foreignKeyHelper.getForeignKeyStatementsByHashItem(foreignKeyHashTable[jsonSchema.GUID]) + : null; +}; + const generateScript = (data, logger, callback, app) => { try { const jsonSchema = JSON.parse(data.jsonSchema); @@ -20,8 +58,6 @@ const generateScript = (data, logger, callback, app) => { const entityData = data.entityData; const areColumnConstraintsAvailable = getIsConstraintAvailable(data); const isPkOrFkConstraintAvailable = getIsPkOrFkConstraintAvailable(data); - const allCollectionsJsonSchema = data.allCollectionsJsonSchema ?? []; - const needMinify = _.get(data, 'options.additionalOptions', []).find(option => option.id === 'minify')?.value; setMinify(needMinify); @@ -31,30 +67,16 @@ const generateScript = (data, logger, callback, app) => { callback(null, scripts); return; } - const relationships = data.modelData.find(modelData => 'relationships' in modelData)?.relationships || []; - const parsedEntitiesById = allCollectionsJsonSchema.reduce((result, schema) => { - const data = JSON.parse(schema); - result[data.GUID] = data; - return result; - }, {}); - - const foreignKeyHashTable = foreignKeyHelper.getForeignKeyHashTable({ - relationships, - entities: Object.keys(parsedEntitiesById), - entityData: { - [jsonSchema.GUID]: entityData, - }, - jsonSchemas: parsedEntitiesById, + const foreignKeys = getForeignKeyStatements({ + jsonSchema, + entityData, modelDefinitions, internalDefinitions, - otherDefinitions: [modelDefinitions, externalDefinitions], - isContainerActivated: entityData[0]?.isActivated, - relatedSchemas: {}, + externalDefinitions, + collectionsJsonSchema: data.collectionsJsonSchema, + relationships: data.modelData.find(modelData => 'relationships' in modelData)?.relationships, }); - const foreignKeys = foreignKeyHelper.getForeignKeyStatementsByHashItem( - foreignKeyHashTable[jsonSchema.GUID] ?? {}, - ); callback( null, diff --git a/forward_engineering/helpers/foreignKeyHelper.js b/forward_engineering/helpers/foreignKeyHelper.js index 014b911..689c4ab 100644 --- a/forward_engineering/helpers/foreignKeyHelper.js +++ b/forward_engineering/helpers/foreignKeyHelper.js @@ -91,12 +91,9 @@ const getForeignKeyHashTable = ({ childTableName: childTableName, parentColumn: getPreparedForeignColumns(relationship.parentField, idToNameHashTable), childColumn: getPreparedForeignColumns(relationship.childField, idToNameHashTable), - isActivated: - isContainerActivated && - _.get(parentTableData, 'isActivated') && - _.get(childTableData, 'isActivated') && - childFieldActivated && - parentFieldActivated, + isActivated: isContainerActivated + ? _.get(parentTableData, 'isActivated') && _.get(childTableData, 'isActivated') + : true && childFieldActivated && parentFieldActivated, }); return hashTable; From a720e0064acb119400d93a269e8907b361609d7e Mon Sep 17 00:00:00 2001 From: yevhenii-moroziuk Date: Thu, 12 Feb 2026 11:00:24 +0200 Subject: [PATCH 4/4] HCK-14740: rename param --- forward_engineering/generateScript.js | 8 ++++---- forward_engineering/helpers/foreignKeyHelper.js | 9 ++++++--- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/forward_engineering/generateScript.js b/forward_engineering/generateScript.js index c227041..f52e9b6 100644 --- a/forward_engineering/generateScript.js +++ b/forward_engineering/generateScript.js @@ -16,14 +16,14 @@ const getForeignKeyStatements = ({ modelDefinitions, internalDefinitions, externalDefinitions, - collectionsJsonSchema = [], + relatedCollectionsJsonSchema = [], relationships = [], }) => { - if (!relationships.length || !collectionsJsonSchema.length) { + if (!relationships.length || !relatedCollectionsJsonSchema.length) { return null; } - const parsedEntitiesById = collectionsJsonSchema.reduce((result, schema) => { + const parsedEntitiesById = relatedCollectionsJsonSchema.reduce((result, schema) => { const data = JSON.parse(schema); result[data.GUID] = data; return result; @@ -74,7 +74,7 @@ const generateScript = (data, logger, callback, app) => { modelDefinitions, internalDefinitions, externalDefinitions, - collectionsJsonSchema: data.collectionsJsonSchema, + relatedCollectionsJsonSchema: data.relatedCollectionsJsonSchema, relationships: data.modelData.find(modelData => 'relationships' in modelData)?.relationships, }); diff --git a/forward_engineering/helpers/foreignKeyHelper.js b/forward_engineering/helpers/foreignKeyHelper.js index 689c4ab..014b911 100644 --- a/forward_engineering/helpers/foreignKeyHelper.js +++ b/forward_engineering/helpers/foreignKeyHelper.js @@ -91,9 +91,12 @@ const getForeignKeyHashTable = ({ childTableName: childTableName, parentColumn: getPreparedForeignColumns(relationship.parentField, idToNameHashTable), childColumn: getPreparedForeignColumns(relationship.childField, idToNameHashTable), - isActivated: isContainerActivated - ? _.get(parentTableData, 'isActivated') && _.get(childTableData, 'isActivated') - : true && childFieldActivated && parentFieldActivated, + isActivated: + isContainerActivated && + _.get(parentTableData, 'isActivated') && + _.get(childTableData, 'isActivated') && + childFieldActivated && + parentFieldActivated, }); return hashTable;