UNPKG

generator-springboot-hexagonal

Version:

A code generator for SpringBoot microservices in Hexagonal Architecture

116 lines (91 loc) 3.75 kB
'use strict'; const BaseGenerator = require('../base-generator'); const constants = require('../constants'); const _ = require('lodash'); module.exports = class extends BaseGenerator { constructor(args, opts) { super(args, opts); this.configOptions = this.options.configOptions || {}; this.argument("entityName", { type: String, required: true, description: "Entity name" }); } get initializing() { this.logSuccess('Generating DTO, KafkaConfig, producer and consumer'); return { validateEntityName() { const context = this.context; console.log(`EntityName: ${this.options.entityName}`); //this.env.error("The entity name is invalid"); } } } /*get prompting() { return prompts.prompting; }*/ configuring() { this.configOptions = Object.assign({}, this.configOptions, this.config.getAll()); this.configOptions.entityName = this.options.entityName; this.configOptions.entityVarName = _.camelCase(this.options.entityName); this.configOptions.queueName = `queue-${this.configOptions.entityVarName}`; this.configOptions.kafka = true; Object.assign(this.configOptions, kafka); this.config.set(kafka); Object.assign(this.configOptions, constants); } writing() { this._generateMavenConfig(this.configOptions); this._generateAppCode(this.configOptions); this._generateBrokerClass(this.configOptions) } _generateMavenConfig(configOptions) { this._copyMavenWrapper(configOptions); this._generateMavenPOMXml(configOptions); } end() { //TODO; Disabling this temporarily to fix test failures. //this._formatCode(this.configOptions); } _generateAppCode(configOptions) { const mainJavaTemplates = [ {src: 'adapters/dto/Entity.java', dest: 'adapters/dto/'+configOptions.entityName+'DTO.java'}, {src: 'adapters/inbound/message/consumer/Consumer.java', dest: 'adapters/inbound/message/consumer/'+configOptions.entityName+'Consumer.java'}, {src: 'adapters/inbound/message/producer/Producer.java', dest: 'adapters/inbound/message/producer/'+configOptions.entityName+'Producer.java'}, {src: 'adapters/inbound/message/config/MQConfig.java', dest: 'adapters/inbound/message/config/KafkaMQConfig.java'}, ]; this.generateMainJavaCode(configOptions, mainJavaTemplates); } _generateBrokerClass(configOptions) { if(configOptions.brokerTool === 'consumer') { } if(configOptions.brokerTool === 'producer') { } } _copyMavenWrapper(configOptions) { const commonMavenConfigDir = '../../common/files/maven/'; ['mvnw', 'mvnw.cmd'].forEach(tmpl => { this.fs.copyTpl( this.templatePath(commonMavenConfigDir + tmpl), this.destinationPath(tmpl) ); }); this.fs.copyTpl( this.templatePath(commonMavenConfigDir + 'gitignore'), this.destinationPath('.gitignore') ); this.fs.copy( this.templatePath(commonMavenConfigDir + '.mvn'), this.destinationPath('.mvn') ); } _generateMavenPOMXml(configOptions) { const mavenConfigDir = 'maven/'; this.fs.copyTpl( this.templatePath(mavenConfigDir + 'pom.xml'), this.destinationPath('pom.xml'), configOptions ); } };