Skip to content

Commit 73792a9

Browse files
committed
feat: create controller and repo while discovering when relations: true
Signed-off-by: Muhammad Aaqil <[email protected]>
1 parent 0c7708d commit 73792a9

File tree

2 files changed

+67
-19
lines changed

2 files changed

+67
-19
lines changed

packages/cli/generators/discover/index.js

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,12 @@ module.exports = class DiscoveryGenerator extends ArtifactGenerator {
362362
}
363363
this.artifactInfo.indexesToBeUpdated =
364364
this.artifactInfo.indexesToBeUpdated || [];
365-
365+
const relations = [];
366+
const repositoryConfigs = {
367+
datasource: '',
368+
repositories: new Set(),
369+
repositoryBaseClass: 'DefaultCrudRepository',
370+
};
366371
// eslint-disable-next-line @typescript-eslint/prefer-for-of
367372
for (let i = 0; i < this.artifactInfo.modelDefinitions.length; i++) {
368373
const modelDefinition = this.artifactInfo.modelDefinitions[i];
@@ -391,23 +396,18 @@ module.exports = class DiscoveryGenerator extends ArtifactGenerator {
391396
);
392397
// If targetModel is not in discovered models, skip creating relation
393398
if (targetModel) {
394-
Object.assign(templateData.properties[relation.foreignKey], {
395-
relation,
396-
});
397-
if (!relationImports.includes(relation.type)) {
398-
relationImports.push(relation.type);
399-
}
400-
relationDestinationImports.push(relation.model);
401-
402-
foreignKeys[relationName] = {};
403-
Object.assign(foreignKeys[relationName], {
404-
name: relationName,
405-
entity: relation.model,
406-
entityKey: Object.entries(targetModel.properties).find(
407-
x => x?.[1].id === 1,
408-
)?.[0],
409-
foreignKey: relation.foreignKey,
410-
});
399+
const configs = {};
400+
configs['sourceModel'] = templateData.name;
401+
configs['destinationModel'] = targetModel.name;
402+
configs['foreignKeyName'] = relation.foreignKey;
403+
configs['relationType'] = relation.type;
404+
configs['registerInclusionResolver'] = true;
405+
configs['yes'] = true;
406+
relations.push(configs);
407+
repositoryConfigs['datasource'] =
408+
this.options.datasource || this.options.dataSource;
409+
repositoryConfigs.repositories.add(templateData.name);
410+
repositoryConfigs.repositories.add(targetModel.name);
411411
}
412412
}
413413
// remove model import if the model relation is with itself
@@ -462,6 +462,8 @@ module.exports = class DiscoveryGenerator extends ArtifactGenerator {
462462
// This part at the end is just for the ArtifactGenerator
463463
// end message to output something nice, before it was "Discover undefined was created in src/models/"
464464
this.artifactInfo.type = 'Models';
465+
this.artifactInfo.relationConfigs = relations;
466+
this.artifactInfo.repositoryConfigs = repositoryConfigs;
465467
this.artifactInfo.name = this.artifactInfo.modelDefinitions
466468
.map(d => d.name)
467469
.join(',');

packages/cli/lib/artifact-generator.js

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,53 @@ module.exports = class ArtifactGenerator extends BaseGenerator {
128128
.split(this.classNameSeparator)
129129
.map(utils.toClassName);
130130
const classesOutput = classes.join(this.classNameSeparator);
131-
131+
if (
132+
this.artifactInfo.repositoryConfigs &&
133+
this.artifactInfo.repositoryConfigs.repositories.size
134+
) {
135+
const {repositories, datasource, repositoryBaseClass} =
136+
this.artifactInfo.repositoryConfigs;
137+
for (const model of repositories) {
138+
const config = {repositoryBaseClass, datasource, model, name: model};
139+
try {
140+
const {execSync} = require('child_process');
141+
const cmd =
142+
"lb4 repository --config='" + JSON.stringify(config) + "' --yes";
143+
execSync(cmd, {
144+
cwd: process.cwd(),
145+
stdio: ['ignore', 'pipe', 'pipe'],
146+
encoding: 'utf8',
147+
});
148+
} catch (error) {
149+
console.log(error);
150+
}
151+
}
152+
} else {
153+
debug(
154+
'No repository configurations found, skipping repository generation',
155+
);
156+
}
157+
if (
158+
this.artifactInfo.relationConfigs &&
159+
this.artifactInfo.relationConfigs.length
160+
) {
161+
for (const configs of this.artifactInfo.relationConfigs) {
162+
try {
163+
const {execSync} = require('child_process');
164+
const cmd =
165+
"lb4 relation --config='" + JSON.stringify(configs) + "' --yes";
166+
execSync(cmd, {
167+
cwd: process.cwd(),
168+
stdio: ['ignore', 'pipe', 'pipe'],
169+
encoding: 'utf8',
170+
});
171+
} catch (error) {
172+
console.log(error);
173+
}
174+
}
175+
} else {
176+
debug('No relation configurations found, skipping relation generation');
177+
}
132178
// User Output
133179
this.log();
134180
this.log(

0 commit comments

Comments
 (0)