added jpa entity generator

master
Niclas Thobaben 2021-09-18 13:35:21 +02:00
parent b8bac626fb
commit f6b674d330
4 changed files with 103 additions and 1 deletions

View File

@ -22,6 +22,13 @@ module.exports = {
description: "Java Event Models for Axon.",
attributes: [],
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')
},
}

View 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
]
}

View 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
})
}
}

View 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 {
}