11/* global _,appRootPath */
22const fs = require ( 'fs' ) ;
3+ const path = require ( 'path' ) ;
4+ const fsExtra = require ( 'fs-extra' ) ;
35const mongoose = require ( 'mongoose' ) ;
46const os = require ( 'os' ) ;
57const { getAllDirFilesCount } = require ( '../../util-service/common' ) ;
@@ -41,13 +43,12 @@ const ProjectRoleAccessPermissions = new ProjectRoleAccessPermissionsRepo();
4143const NestedQueryBuilder = new NestedQueryBuilderRepo ( ) ;
4244
4345const generateNodeCode = async (
44- input , applicationRepo , definition , generatedId , dirPath , projectName , applicationId , generatorRepo ,
46+ input , applicationRepo , definition , generatedId , dirPath , projectName , applicationId , generatorRepo , isReBuild ,
4547) => {
4648 try {
4749 const updatedApp = await applicationRepo . update ( applicationId , { 'inProcessStatus.build_app' : IN_PROCESS } ) ;
4850 await generatorRepo . update ( generatedId , { 'inProcessStatus.build_app' : IN_PROCESS } ) ;
49-
50- await generator ( input ) ;
51+ await generator ( input , isReBuild ) ;
5152 // eslint-disable-next-line max-len
5253 const lastGeneratorRecord = await generatorRepo . getDetails ( {
5354 find : {
@@ -419,6 +420,46 @@ const nodeExpressRequest = async (applicationId, project, schemaRepo) => {
419420 } ;
420421} ;
421422
423+ const getDirectoryAndFiles = ( source ) => {
424+ const directory = [ ] ;
425+ const files = [ ] ;
426+ fs . readdirSync ( source ) . forEach ( ( file ) => {
427+ if ( fs . lstatSync ( path . resolve ( source , file ) ) . isDirectory ( ) ) {
428+ directory . push ( file ) ;
429+ } else {
430+ files . push ( file ) ;
431+ }
432+ } ) ;
433+ return {
434+ directory,
435+ files,
436+ } ;
437+ } ;
438+
439+ const overwriteProject = async ( generatedId , projectName ) => {
440+ await fsExtra . copy ( `./output/${ generatedId } /${ projectName } /.env` , `./output/${ generatedId } /${ projectName } _dhiwise_temp_app/.env` ) ;
441+
442+ const outputProjectDir = `./output/${ generatedId } /${ projectName } ` ;
443+ // fsExtra.emptyDirSync(directory);
444+
445+ const {
446+ directories, files,
447+ } = await getDirectoryAndFiles ( outputProjectDir ) ;
448+
449+ _ . forEach ( directories , ( dirName ) => {
450+ if ( dirName !== 'node_modules' ) {
451+ fsExtra . emptyDirSync ( `${ outputProjectDir } /${ dirName } ` ) ;
452+ }
453+ } ) ;
454+
455+ _ . forEach ( files , ( fileName ) => {
456+ fsExtra . remove ( `${ outputProjectDir } /${ fileName } ` ) ;
457+ } ) ;
458+
459+ await fsExtra . copy ( `./output/${ generatedId } /${ projectName } _dhiwise_temp_app` , `./output/${ generatedId } /${ projectName } ` ) ; // copies file
460+ await fsExtra . remove ( `./output/${ generatedId } /${ projectName } _dhiwise_temp_app` ) ;
461+ } ;
462+
422463const generate = ( applicationRepo , schemaRepo , generatorRepo ) => async ( params ) => {
423464 try {
424465 if ( ! params . applicationId ) {
@@ -447,6 +488,9 @@ const generate = (applicationRepo, schemaRepo, generatorRepo) => async (params)
447488 } ;
448489 }
449490
491+ let generated ;
492+ let isReBuild = false ;
493+
450494 const definition = {
451495 generatorPath : `${ appRootPath } /output` ,
452496 inputPath : `${ appRootPath } /input` ,
@@ -457,11 +501,35 @@ const generate = (applicationRepo, schemaRepo, generatorRepo) => async (params)
457501 config : definition ,
458502 applicationId : params . applicationId ,
459503 type : 1 ,
460- status : 1 ,
504+ status : 2 ,
461505 versionNumber : '1' ,
462506 semanticVersionNumber : '1.0' ,
463507 } ;
464- let generated = await generatorRepo . create ( obj ) ;
508+
509+ if ( params . applicationId ) {
510+ const query = {
511+ find : {
512+ applicationId : params . applicationId ,
513+ isDeleted : false ,
514+ config : definition ,
515+ type : 1 ,
516+ status : 2 ,
517+ } ,
518+ sortBy : { _id : - 1 } ,
519+ } ;
520+
521+ const generatedApps = await generatorRepo . getDetails ( query ) ;
522+
523+ if ( generatedApps . length > 0 ) {
524+ // eslint-disable-next-line prefer-destructuring
525+ generated = generatedApps [ 0 ] ; // latest App
526+ generated . id = generated . _id ;
527+ isReBuild = true ;
528+ } else {
529+ obj . status = 1 ;
530+ generated = await generatorRepo . create ( obj ) ;
531+ }
532+ }
465533 if ( ! generated ) {
466534 return GENERATOR_FAILED_CREATE ;
467535 }
@@ -566,9 +634,12 @@ const generate = (applicationRepo, schemaRepo, generatorRepo) => async (params)
566634 await generatorRepo . update ( generated . id , { 'inProcessStatus.build_app' : IN_QUEUE } ) ;
567635
568636 const status = await generateNodeCode (
569- inputFile , applicationRepo , definition , generated . id , dirPath , project . name , params . applicationId , generatorRepo ,
637+ inputFile , applicationRepo , definition , generated . id , dirPath , project . name , params . applicationId , generatorRepo , isReBuild ,
570638 ) ;
571639 if ( status ) {
640+ if ( isReBuild ) {
641+ await overwriteProject ( generated . id , jsonData . config . projectName ) ;
642+ }
572643 return {
573644 ...PROJECT_GENERATED ,
574645 data : {
@@ -580,7 +651,7 @@ const generate = (applicationRepo, schemaRepo, generatorRepo) => async (params)
580651 }
581652 return SERVER_ERROR ;
582653 } catch ( err ) {
583- // console.log('error', err);
654+ console . log ( 'error' , err ) ;
584655 return SERVER_ERROR ;
585656 }
586657} ;
0 commit comments