UNPKG

gen-jhipster

Version:

VHipster - Spring Boot + Angular/React/Vue in one handy generator

152 lines (151 loc) 7.52 kB
/** * Copyright 2013-2026 the original author or authors from the JHipster project. * * This file is part of the JHipster project, see https://www.jhipster.tech/ * for more information. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import assert from 'node:assert'; import { snakeCase } from 'lodash-es'; import { databaseTypes, entityOptions, fieldTypes, reservedKeywords } from "../../../lib/jhipster/index.js"; import { buildMutateDataForProperty, mutateData } from "../../../lib/utils/index.js"; import { formatDocAsApiDescription, formatDocAsJavaDoc } from "../../java/support/doc.js"; import { getUXConstraintName } from "./database.js"; import { getJavaValueGeneratorForType } from "./templates/field-values.js"; const { isReservedTableName } = reservedKeywords; const { CommonDBTypes } = fieldTypes; const { MYSQL, SQL } = databaseTypes; const { MapperTypes } = entityOptions; const { MAPSTRUCT } = MapperTypes; const { INTEGER, LONG, UUID } = CommonDBTypes; export const prepareMapstructField = (entity, field) => { if (field.mapstructExpression) { assert.equal(entity.dto, MAPSTRUCT, `@MapstructExpression requires an Entity with mapstruct dto [${entity.name}.${field.fieldName}].`); // Remove from Entity.java and liquibase. field.transient = true; // Disable update form. field.readonly = true; } return field; }; export default function prepareField(application, entityWithConfig, field, generator) { prepareMapstructField(entityWithConfig, field); if (field.documentation) { mutateData(field, { __override__: false, fieldJavadoc: formatDocAsJavaDoc(field.documentation, 4), fieldApiDescription: formatDocAsApiDescription(field.documentation), propertyApiDescription: ({ fieldApiDescription }) => fieldApiDescription, }); } const { reactive: entityReactive, prodDatabaseType: entityProdDatabaseType } = entityWithConfig; if (field.id && entityWithConfig.primaryKey) { field.autoGenerate ??= !entityWithConfig.primaryKey.composite && [INTEGER, LONG, UUID].includes(field.fieldType); if (!field.autoGenerate) { field.liquibaseAutoIncrement = false; field.jpaGeneratedValue = false; field.autoGenerateByService = false; field.autoGenerateByRepository = false; field.requiresPersistableImplementation = true; } else if (entityWithConfig.databaseType !== SQL) { field.liquibaseAutoIncrement = false; field.jpaGeneratedValue = false; field.autoGenerateByService = field.fieldType === UUID; field.autoGenerateByRepository = !field.autoGenerateByService; field.requiresPersistableImplementation = false; field.readonly = true; } else if (entityReactive) { field.liquibaseAutoIncrement = field.fieldType === LONG; field.jpaGeneratedValue = false; field.autoGenerateByService = !field.liquibaseAutoIncrement; field.autoGenerateByRepository = !field.autoGenerateByService; field.requiresPersistableImplementation = !field.liquibaseAutoIncrement; field.readonly = true; } else { const defaultGenerationType = entityProdDatabaseType === MYSQL ? 'identity' : 'sequence'; field.jpaGeneratedValue = field.jpaGeneratedValue || [INTEGER, LONG].includes(field.fieldType) ? defaultGenerationType : true; field.jpaGeneratedValueSequence = field.jpaGeneratedValue === 'sequence'; field.jpaGeneratedValueIdentity = field.jpaGeneratedValue === 'identity'; field.autoGenerateByService = false; field.autoGenerateByRepository = true; field.requiresPersistableImplementation = false; field.readonly = true; if (field.jpaGeneratedValueIdentity) { field.liquibaseAutoIncrement = true; } else if (field.jpaGeneratedValueSequence) { field.jpaSequenceGeneratorName = field.sequenceGeneratorName ?? 'sequenceGenerator'; field.liquibaseSequenceGeneratorName = snakeCase(field.jpaSequenceGeneratorName); field.liquibaseCustomSequenceGenerator = field.liquibaseSequenceGeneratorName !== 'sequence_generator'; } } } if (field.fieldNameAsDatabaseColumn === undefined) { const fieldNameUnderscored = snakeCase(field.fieldName); if (isReservedTableName(fieldNameUnderscored, entityProdDatabaseType ?? entityWithConfig.databaseType)) { if (!application.jhiTablePrefix) { generator.log.warn(`The field name '${fieldNameUnderscored}' is regarded as a reserved keyword, but you have defined an empty jhiPrefix. This might lead to a non-working application.`); field.fieldNameAsDatabaseColumn = fieldNameUnderscored; } else { field.fieldNameAsDatabaseColumn = `${application.jhiTablePrefix}_${fieldNameUnderscored}`; } } else { field.fieldNameAsDatabaseColumn = fieldNameUnderscored; } } field.columnName = field.fieldNameAsDatabaseColumn; if (field.unique) { field.uniqueConstraintName = getUXConstraintName(entityWithConfig.entityTableName, field.columnName, { prodDatabaseType: entityProdDatabaseType, }).value; } if (field.fieldValidateRulesPatternJava === undefined) { field.fieldValidateRulesPatternJava = field.fieldValidateRulesPattern ? field.fieldValidateRulesPattern.replace(/\\/g, '\\\\').replace(/"/g, String.raw `\"`) : field.fieldValidateRulesPattern; } if (field.blobContentTypeText) { field.javaFieldType = 'String'; } else { field.javaFieldType = field.fieldType; } mutateData(field, buildMutateDataForProperty('javaFieldType', ['String', 'Integer', 'Long', 'UUID'])); if (field.fieldTypeInteger || field.fieldTypeLong || field.fieldTypeString || field.fieldTypeUUID) { if (field.fieldTypeInteger) { field.javaValueSample1 = '1'; field.javaValueSample2 = '2'; } else if (field.fieldTypeLong) { field.javaValueSample1 = '1L'; field.javaValueSample2 = '2L'; } else if (field.fieldTypeString) { field.javaValueSample1 = `"${field.fieldName}1"`; field.javaValueSample2 = `"${field.fieldName}2"`; } else if (field.fieldTypeUUID) { field.javaValueSample1 = 'UUID.fromString("23d8dc04-a48b-45d9-a01d-4b728f0ad4aa")'; field.javaValueSample2 = 'UUID.fromString("ad79f240-3727-46c3-b89f-2cf6ebd74367")'; } field.javaValueGenerator = getJavaValueGeneratorForType(field.javaFieldType); } field.fieldSupportsSortBy = !field.transient; }