added jpa entity generator
This commit is contained in:
parent
b8bac626fb
commit
f6b674d330
|
@ -22,6 +22,13 @@ module.exports = {
|
||||||
description: "Java Event Models for Axon.",
|
description: "Java Event Models for Axon.",
|
||||||
attributes: [],
|
attributes: [],
|
||||||
invocation: require('./java-axon-events-generator')
|
invocation: require('./java-axon-events-generator')
|
||||||
}
|
},
|
||||||
|
nclazz_java_jpa_entites: {
|
||||||
|
key: "nclazz_jpa_entities",
|
||||||
|
name: "Java JPA Entities",
|
||||||
|
description: "Java JPA/Hibernate Entities.",
|
||||||
|
attributes: [],
|
||||||
|
invocation: require('./java-jpa-entities.generator')
|
||||||
|
},
|
||||||
|
|
||||||
}
|
}
|
28
src/generators/java-jpa-entities.generator.js
Normal file
28
src/generators/java-jpa-entities.generator.js
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
const Mustache = require('mustache')
|
||||||
|
const fs = require('fs')
|
||||||
|
const path = require('path')
|
||||||
|
|
||||||
|
const jpaEntites = require('../java-jpa-entity');
|
||||||
|
|
||||||
|
const templateEntities = fs.readFileSync(path.resolve(path.join('templates', 'jpa-entity.java.mustache')), 'utf-8')
|
||||||
|
|
||||||
|
module.exports = (service) => {
|
||||||
|
|
||||||
|
const jpaModels = service.models.filter(model => model.attributes.find(attr => attr.name == 'jpa_sql'))
|
||||||
|
const models = jpaEntites.mapJavaJpaEntity(jpaModels, service.namespace)
|
||||||
|
|
||||||
|
const modelFiles = models.map(model => {
|
||||||
|
return {
|
||||||
|
name: `${model.name}.java`,
|
||||||
|
dir: model.dir,
|
||||||
|
contents: Mustache.render(templateModel, { service, ...model })
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return [
|
||||||
|
...modelFiles,
|
||||||
|
...enumFiles,
|
||||||
|
...unionFiles
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
}
|
35
src/java-jpa-entity.js
Normal file
35
src/java-jpa-entity.js
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
const utils = require('./utils')
|
||||||
|
const javaType = require('./java-type')
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
mapJavaJpaEntity: (models, namespace, suffix='models') => {
|
||||||
|
return models.map(model => {
|
||||||
|
|
||||||
|
let jpa = model.attributes.find(attr => attr.name == 'jpa_sql');
|
||||||
|
|
||||||
|
model.name = utils.pascalcase(model.name)
|
||||||
|
model.package = `${namespace}.${suffix}`;
|
||||||
|
model.dir = model.package.replace(/\./g, '/')
|
||||||
|
model.fields = model.fields.map(field => {
|
||||||
|
field.name = utils.camelcase(field.name)
|
||||||
|
field.type = javaType.mapJavaType(field.type, namespace)
|
||||||
|
field.default = javaType.mapDefaultValue(field.type, field.default)
|
||||||
|
return field
|
||||||
|
})
|
||||||
|
|
||||||
|
let imports = []
|
||||||
|
for(let field of model.fields) {
|
||||||
|
imports = [ ...imports, ...field.type.imports ]
|
||||||
|
}
|
||||||
|
model.imports = [ ...new Set(imports) ]
|
||||||
|
model.implements = model.implements || []
|
||||||
|
if(model.implements.length) {
|
||||||
|
model['implements'][ model['implements'].length - 1 ].last = true
|
||||||
|
}
|
||||||
|
|
||||||
|
model.table = jpa.table || model.plural
|
||||||
|
|
||||||
|
return model
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
32
templates/jpa-entity.java.mustache
Normal file
32
templates/jpa-entity.java.mustache
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
/**
|
||||||
|
* Auto-generated from apibuilder.io service specification.
|
||||||
|
* apidoc-version : {{service.apidoc.version}}
|
||||||
|
* organisation : {{service.organization.key}}
|
||||||
|
* service-version : {{service.version}}
|
||||||
|
*
|
||||||
|
* Documentation at:
|
||||||
|
* <a href="https://app.apibuilder.io/{{service.organization.key}}/{{service.name}}/{{service.version}}">https://app.apibuilder.io/{{service.organization.key}}/{{service.name}}/{{service.version}}</a>
|
||||||
|
*
|
||||||
|
**/
|
||||||
|
package {{package}};
|
||||||
|
|
||||||
|
import javax.persistence.*;
|
||||||
|
{{#imports}}
|
||||||
|
import {{{.}}};
|
||||||
|
{{/imports}}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {{description}}
|
||||||
|
* See <a href="https://app.apibuilder.io/{{service.organization.key}}/{{service.name}}/{{service.version}}#model-{{model.name}}">https://app.apibuilder.io/{{service.organization.key}}/{{service.name}}/{{service.version}}#model-{{model.name}}</a>
|
||||||
|
*
|
||||||
|
**/
|
||||||
|
@Entity
|
||||||
|
@Data
|
||||||
|
@Table(
|
||||||
|
name = "{{table}}"
|
||||||
|
)
|
||||||
|
public class {{name}}Entity {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in a new issue