@@ -363,6 +363,12 @@ module.exports = class DiscoveryGenerator extends ArtifactGenerator {
363363 this . artifactInfo . indexesToBeUpdated =
364364 this . artifactInfo . indexesToBeUpdated || [ ] ;
365365
366+ const relations = [ ] ;
367+ const repositoryConfigs = {
368+ datasource : '' ,
369+ repositories : new Set ( ) ,
370+ repositoryBaseClass : 'DefaultCrudRepository' ,
371+ } ;
366372 // eslint-disable-next-line @typescript-eslint/prefer-for-of
367373 for ( let i = 0 ; i < this . artifactInfo . modelDefinitions . length ; i ++ ) {
368374 const modelDefinition = this . artifactInfo . modelDefinitions [ i ] ;
@@ -391,23 +397,18 @@ module.exports = class DiscoveryGenerator extends ArtifactGenerator {
391397 ) ;
392398 // If targetModel is not in discovered models, skip creating relation
393399 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- } ) ;
400+ const configs = { } ;
401+ configs [ 'sourceModel' ] = templateData . name ;
402+ configs [ 'destinationModel' ] = targetModel . name ;
403+ configs [ 'foreignKeyName' ] = relation . foreignKey ;
404+ configs [ 'relationType' ] = relation . type ;
405+ configs [ 'registerInclusionResolver' ] = true ;
406+ configs [ 'yes' ] = true ;
407+ relations . push ( configs ) ;
408+ repositoryConfigs [ 'datasource' ] =
409+ this . options . datasource || this . options . dataSource ;
410+ repositoryConfigs . repositories . add ( templateData . name ) ;
411+ repositoryConfigs . repositories . add ( targetModel . name ) ;
411412 }
412413 }
413414 // remove model import if the model relation is with itself
@@ -462,12 +463,57 @@ module.exports = class DiscoveryGenerator extends ArtifactGenerator {
462463 // This part at the end is just for the ArtifactGenerator
463464 // end message to output something nice, before it was "Discover undefined was created in src/models/"
464465 this . artifactInfo . type = 'Models' ;
466+ this . artifactInfo . relationConfigs = relations ;
467+ repositoryConfigs [ 'relations' ] = JSON . stringify ( relations ) ;
468+ this . artifactInfo . repositoryConfigs = repositoryConfigs ;
465469 this . artifactInfo . name = this . artifactInfo . modelDefinitions
466470 . map ( d => d . name )
467471 . join ( ',' ) ;
468472 }
469473
470474 async end ( ) {
471475 await super . end ( ) ;
476+ await this . _generateRepositories ( ) ;
477+ }
478+
479+ async _generateRepositories ( ) {
480+ if (
481+ ! this . artifactInfo . repositoryConfigs ||
482+ ! this . artifactInfo . repositoryConfigs . repositories ||
483+ this . artifactInfo . repositoryConfigs . repositories . size === 0
484+ ) {
485+ debug (
486+ 'No repository configurations found, skipping repository generation' ,
487+ ) ;
488+ return ;
489+ }
490+ const { repositories, datasource, repositoryBaseClass, relations} =
491+ this . artifactInfo . repositoryConfigs ;
492+ // Convert Set to Array and iterate
493+ const modelList = Array . from ( repositories ) ;
494+ for ( let index = 0 ; index < modelList . length ; index ++ ) {
495+ const model = modelList [ index ] ;
496+ const repoGenOptions = {
497+ name : model ,
498+ model,
499+ datasource,
500+ repositoryBaseClass,
501+ yes : true ,
502+ skipInstall : true ,
503+ skipCache : true ,
504+ } ;
505+ if ( index === modelList . length - 1 ) {
506+ repoGenOptions . relations = relations ;
507+ }
508+ // Use composeWith to invoke the repository generator
509+ const repoGen = require ( '../repository' ) ;
510+ this . composeWith (
511+ {
512+ Generator : repoGen ,
513+ path : require . resolve ( '../repository' ) ,
514+ } ,
515+ repoGenOptions ,
516+ ) ;
517+ }
472518 }
473519} ;
0 commit comments