Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for plain Time fields #28474

Merged
merged 1 commit into from
Jan 24, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,9 @@ _%>
<%_ } else if (field.fieldTypeBoolean) { _%>
<input type="<%= fieldInputType %>" class="form-check" name="<%= fieldName %>" id="field_<%= fieldName %>"
data-cy="<%= fieldName %>" formControlName="<%= fieldName %>" <% if (readonly) { %> [readonly]="true"<% } %>/>
<%_ } else if (field.fieldTypeLocalTime) { _%>
<input type="time" class="form-control" name="<%= fieldName %>" id="field_<%= fieldName %>" data-cy="<%= fieldName %>"
formControlName="<%= fieldName %>"<% if (readonly) { %> [readonly]="true"<% } %>/>
<%_ } else { _%>
<input type="<%= fieldInputType %>" class="form-control" name="<%= fieldName %>" id="field_<%= fieldName %>" data-cy="<%= fieldName %>"
formControlName="<%= fieldName %>"<% if (field.id && !field.autoGenerate) { %> [readonly]="editForm.get('<%= primaryKey.name %>')!.disabled"<% } else if (readonly) { %> [readonly]="true"<% } %>/>
Expand Down
2 changes: 2 additions & 0 deletions generators/base-application/support/field-utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ const {
STRING,
UUID,
ZONED_DATE_TIME,
LOCAL_TIME,
IMAGE_BLOB,
ANY_BLOB,
TEXT_BLOB,
Expand All @@ -50,6 +51,7 @@ export function fieldIsEnum(fieldType) {
LOCAL_DATE,
INSTANT,
ZONED_DATE_TIME,
LOCAL_TIME,
DURATION,
UUID,
BOOLEAN,
Expand Down
3 changes: 2 additions & 1 deletion generators/base-application/support/prepare-entity.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ const NO_MAPPER = MapperTypes.NO;

const { CASSANDRA, COUCHBASE, NEO4J, SQL, MONGODB } = databaseTypes;

const { INSTANT, ZONED_DATE_TIME, DURATION, LOCAL_DATE, BIG_DECIMAL } = fieldTypes.CommonDBTypes;
const { INSTANT, ZONED_DATE_TIME, DURATION, LOCAL_DATE, BIG_DECIMAL, LOCAL_TIME } = fieldTypes.CommonDBTypes;

const { BYTES, BYTE_BUFFER } = fieldTypes.RelationalOnlyDBTypes;
const { IMAGE, TEXT } = fieldTypes.BlobTypes;
Expand Down Expand Up @@ -549,6 +549,7 @@ export function preparePostEntityCommonDerivedProperties(entity: Entity) {

entity.anyFieldIsZonedDateTime = fieldsType.includes(ZONED_DATE_TIME);
entity.anyFieldIsInstant = fieldsType.includes(INSTANT);
entity.anyFieldIsLocalTime = fieldsType.includes(LOCAL_TIME);
entity.anyFieldIsDuration = fieldsType.includes(DURATION);
entity.anyFieldIsLocalDate = fieldsType.includes(LOCAL_DATE);
entity.anyFieldIsBigDecimal = fieldsType.includes(BIG_DECIMAL);
Expand Down
9 changes: 8 additions & 1 deletion generators/base-application/support/prepare-field.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ const {
ANY_BLOB,
TEXT_BLOB,
BLOB,
LOCAL_TIME,
} = CommonDBTypes;
const { BYTES, BYTE_BUFFER } = RelationalOnlyDBTypes;

Expand Down Expand Up @@ -162,12 +163,17 @@ function generateFakeDataForField(
max: field.fieldValidateRulesMax ?? 32767,
min: field.fieldValidateRulesMin ?? 0,
});
} else if ([INSTANT, ZONED_DATE_TIME, LOCAL_DATE].includes(field.fieldType)) {
} else if ([INSTANT, ZONED_DATE_TIME, LOCAL_DATE, LOCAL_TIME].includes(field.fieldType)) {
// Iso: YYYY-MM-DDTHH:mm:ss.sssZ
const date = faker.date.recent({ days: 1, refDate: changelogDate });
originalData = date.toISOString();
if (field.fieldType === LOCAL_DATE) {
data = originalData.split('T')[0];
} else if (field.fieldType === LOCAL_TIME) {
// time without seconds by default
const timeWithoutMilliseconds = originalData.split('T')[1].split('.')[0];
// default time input fields are set to support HH:mm. Some databases require :00 during loading of fake data to detect the datatype.
data = `${timeWithoutMilliseconds.substring(0, timeWithoutMilliseconds.lastIndexOf(':'))}:00`;
} else if (type === 'json-serializable') {
data = date;
} else {
Expand Down Expand Up @@ -262,6 +268,7 @@ function _derivedProperties(field) {
fieldTypeTimed: fieldType === ZONED_DATE_TIME || fieldType === INSTANT,
fieldTypeCharSequence: fieldType === STRING || fieldType === UUID || fieldType === TEXT_BLOB,
fieldTypeTemporal: fieldType === ZONED_DATE_TIME || fieldType === INSTANT || fieldType === LOCAL_DATE,
fieldTypeLocalTime: fieldType === LOCAL_TIME,
fieldValidationRequired: validationRules.includes(REQUIRED),
fieldValidationMin: validationRules.includes(MIN),
fieldValidationMinLength: validationRules.includes(MINLENGTH),
Expand Down
13 changes: 13 additions & 0 deletions generators/bootstrap-application/generator.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,7 @@ describe(`generator - ${generator}`, () => {
"anyFieldIsDuration": false,
"anyFieldIsInstant": false,
"anyFieldIsLocalDate": false,
"anyFieldIsLocalTime": false,
"anyFieldIsTimeDerived": false,
"anyFieldIsUUID": true,
"anyFieldIsZonedDateTime": false,
Expand Down Expand Up @@ -300,6 +301,7 @@ describe(`generator - ${generator}`, () => {
"fieldTypeInstant": false,
"fieldTypeInteger": false,
"fieldTypeLocalDate": false,
"fieldTypeLocalTime": false,
"fieldTypeLong": false,
"fieldTypeNumeric": false,
"fieldTypeString": false,
Expand Down Expand Up @@ -398,6 +400,7 @@ describe(`generator - ${generator}`, () => {
"fieldTypeInstant": false,
"fieldTypeInteger": false,
"fieldTypeLocalDate": false,
"fieldTypeLocalTime": false,
"fieldTypeLong": false,
"fieldTypeNumeric": false,
"fieldTypeString": true,
Expand Down Expand Up @@ -498,6 +501,7 @@ describe(`generator - ${generator}`, () => {
"fieldTypeInstant": false,
"fieldTypeInteger": false,
"fieldTypeLocalDate": false,
"fieldTypeLocalTime": false,
"fieldTypeLong": false,
"fieldTypeNumeric": false,
"fieldTypeString": true,
Expand Down Expand Up @@ -588,6 +592,7 @@ describe(`generator - ${generator}`, () => {
"fieldTypeInstant": false,
"fieldTypeInteger": false,
"fieldTypeLocalDate": false,
"fieldTypeLocalTime": false,
"fieldTypeLong": false,
"fieldTypeNumeric": false,
"fieldTypeString": true,
Expand Down Expand Up @@ -678,6 +683,7 @@ describe(`generator - ${generator}`, () => {
"fieldTypeInstant": false,
"fieldTypeInteger": false,
"fieldTypeLocalDate": false,
"fieldTypeLocalTime": false,
"fieldTypeLong": false,
"fieldTypeNumeric": false,
"fieldTypeString": true,
Expand Down Expand Up @@ -773,6 +779,7 @@ describe(`generator - ${generator}`, () => {
"fieldTypeInstant": false,
"fieldTypeInteger": false,
"fieldTypeLocalDate": false,
"fieldTypeLocalTime": false,
"fieldTypeLong": false,
"fieldTypeNumeric": false,
"fieldTypeString": true,
Expand Down Expand Up @@ -864,6 +871,7 @@ describe(`generator - ${generator}`, () => {
"fieldTypeInstant": false,
"fieldTypeInteger": false,
"fieldTypeLocalDate": false,
"fieldTypeLocalTime": false,
"fieldTypeLong": false,
"fieldTypeNumeric": false,
"fieldTypeString": false,
Expand Down Expand Up @@ -946,6 +954,7 @@ describe(`generator - ${generator}`, () => {
"fieldTypeInstant": false,
"fieldTypeInteger": false,
"fieldTypeLocalDate": false,
"fieldTypeLocalTime": false,
"fieldTypeLong": false,
"fieldTypeNumeric": false,
"fieldTypeString": true,
Expand Down Expand Up @@ -1161,6 +1170,7 @@ describe(`generator - ${generator}`, () => {
"anyFieldIsDuration": false,
"anyFieldIsInstant": false,
"anyFieldIsLocalDate": false,
"anyFieldIsLocalTime": false,
"anyFieldIsTimeDerived": false,
"anyFieldIsUUID": true,
"anyFieldIsZonedDateTime": false,
Expand Down Expand Up @@ -1267,6 +1277,7 @@ describe(`generator - ${generator}`, () => {
"fieldTypeInstant": false,
"fieldTypeInteger": false,
"fieldTypeLocalDate": false,
"fieldTypeLocalTime": false,
"fieldTypeLong": false,
"fieldTypeNumeric": false,
"fieldTypeString": false,
Expand Down Expand Up @@ -1536,6 +1547,7 @@ describe(`generator - ${generator}`, () => {
"anyFieldIsDuration": false,
"anyFieldIsInstant": false,
"anyFieldIsLocalDate": false,
"anyFieldIsLocalTime": false,
"anyFieldIsTimeDerived": false,
"anyFieldIsUUID": true,
"anyFieldIsZonedDateTime": false,
Expand Down Expand Up @@ -1642,6 +1654,7 @@ describe(`generator - ${generator}`, () => {
"fieldTypeInstant": false,
"fieldTypeInteger": false,
"fieldTypeLocalDate": false,
"fieldTypeLocalTime": false,
"fieldTypeLong": false,
"fieldTypeNumeric": false,
"fieldTypeString": false,
Expand Down
3 changes: 2 additions & 1 deletion generators/client/support/entity-definition.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ const {
ZONED_DATE_TIME: TYPE_ZONED_DATE_TIME,
INSTANT: TYPE_INSTANT,
DURATION: TYPE_DURATION,
LOCAL_TIME: TYPE_TIME,
} = dbTypes.CommonDBTypes;

const TYPE_BYTES = dbTypes.RelationalOnlyDBTypes.BYTES;
Expand Down Expand Up @@ -85,7 +86,7 @@ const generateEntityClientFields = (
tsType = 'boolean';
} else if ([TYPE_INTEGER, TYPE_LONG, TYPE_FLOAT, TYPE_DOUBLE, TYPE_BIG_DECIMAL].includes(fieldType)) {
tsType = 'number';
} else if ([TYPE_STRING, TYPE_UUID, TYPE_DURATION, TYPE_BYTES, TYPE_BYTE_BUFFER].includes(fieldType)) {
} else if ([TYPE_STRING, TYPE_UUID, TYPE_DURATION, TYPE_BYTES, TYPE_BYTE_BUFFER, TYPE_TIME].includes(fieldType)) {
tsType = 'string';
if ([TYPE_BYTES, TYPE_BYTE_BUFFER].includes(fieldType) && field.fieldTypeBlobContent !== 'text') {
variablesWithTypes.push(`${fieldName}ContentType?: ${nullable ? 'string | null' : 'string'}`);
Expand Down
1 change: 1 addition & 0 deletions generators/client/support/types-utils.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ describe('generator - client - support - type-utils', () => {
"Instant": "dayjs.Dayjs",
"Integer": "number",
"LocalDate": "dayjs.Dayjs",
"LocalTime": "string",
"Long": "number",
"String": "string",
"TextBlob": "string",
Expand Down
20 changes: 17 additions & 3 deletions generators/entity/prompts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,22 @@ const { NO: NO_MAPPER, MAPSTRUCT } = MapperTypes;

const { CommonDBTypes, RelationalOnlyDBTypes, BlobTypes } = fieldTypes;

const { BIG_DECIMAL, BOOLEAN, DOUBLE, DURATION, ENUM, FLOAT, INTEGER, INSTANT, LOCAL_DATE, LONG, STRING, UUID, ZONED_DATE_TIME } =
CommonDBTypes;
const {
BIG_DECIMAL,
BOOLEAN,
DOUBLE,
DURATION,
ENUM,
FLOAT,
INTEGER,
INSTANT,
LOCAL_DATE,
LONG,
STRING,
UUID,
ZONED_DATE_TIME,
LOCAL_TIME,
} = CommonDBTypes;
const { BYTES, BYTE_BUFFER } = RelationalOnlyDBTypes;
const { ANY, IMAGE, TEXT } = BlobTypes;

Expand Down Expand Up @@ -485,7 +499,7 @@ async function askForField(this: EntityGenerator) {
{ value: BOOLEAN, name: 'Boolean' },
{ value: ENUM, name: 'Enumeration (Java enum type)' },
{ value: UUID, name: 'UUID' },
{ value: UUID, name: 'UUID' },
{ value: LOCAL_TIME, name: 'LocalTime' },
...(databaseType === CASSANDRA ? [{ value: BYTE_BUFFER, name: '[BETA] Blob' }] : [{ value: BYTES, name: '[BETA] Blob' }]),
],
default: 0,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,8 @@ import java.time.Instant;
import java.time.LocalDate;
<%_ } if (anyFieldIsZonedDateTime) { _%>
import java.time.ZonedDateTime;
<%_ } if (anyFieldIsLocalTime) { _%>
import java.time.LocalTime;
<%_ } if (anyFieldIsDuration) { _%>
import java.time.Duration;
<%_ } if (entityContainsCollectionField) { _%>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,7 @@ ROLE_USER
<property name="blobType" value="blob" dbms="postgresql"/>
<property name="uuidType" value="uuid" dbms="postgresql"/>
<property name="datetimeType" value="datetime" dbms="postgresql"/>
<property name="timeType" value="time(6)" dbms="postgresql"/>

<include file="config/liquibase/changelog/00000000000000_initial_schema.xml" relativeToChangelogFile="false"/>
<include file="config/liquibase/changelog/20200101000100_added_entity_Customer.xml" relativeToChangelogFile="false"/>
Expand Down Expand Up @@ -324,6 +325,7 @@ ROLE_USER
<property name="blobType" value="blob" dbms="postgresql"/>
<property name="uuidType" value="uuid" dbms="postgresql"/>
<property name="datetimeType" value="datetime" dbms="postgresql"/>
<property name="timeType" value="time(6)" dbms="postgresql"/>

<include file="config/liquibase/changelog/00000000000000_initial_schema.xml" relativeToChangelogFile="false"/>
<include file="config/liquibase/changelog/20200101000100_added_entity_Customer.xml" relativeToChangelogFile="false"/>
Expand Down Expand Up @@ -490,6 +492,7 @@ ROLE_USER
<property name="blobType" value="blob" dbms="postgresql"/>
<property name="uuidType" value="uuid" dbms="postgresql"/>
<property name="datetimeType" value="datetime" dbms="postgresql"/>
<property name="timeType" value="time(6)" dbms="postgresql"/>

<include file="config/liquibase/changelog/00000000000000_initial_schema.xml" relativeToChangelogFile="false"/>
<include file="config/liquibase/changelog/20200101000100_added_entity_One.xml" relativeToChangelogFile="false"/>
Expand Down Expand Up @@ -653,6 +656,7 @@ ROLE_USER
<property name="blobType" value="blob" dbms="postgresql"/>
<property name="uuidType" value="uuid" dbms="postgresql"/>
<property name="datetimeType" value="datetime" dbms="postgresql"/>
<property name="timeType" value="time(6)" dbms="postgresql"/>

<include file="config/liquibase/changelog/00000000000000_initial_schema.xml" relativeToChangelogFile="false"/>
<include file="config/liquibase/changelog/20200101000100_added_entity_One.xml" relativeToChangelogFile="false"/>
Expand Down Expand Up @@ -924,6 +928,7 @@ ROLE_USER
<property name="blobType" value="blob" dbms="postgresql"/>
<property name="uuidType" value="uuid" dbms="postgresql"/>
<property name="datetimeType" value="datetime" dbms="postgresql"/>
<property name="timeType" value="time(6)" dbms="postgresql"/>

<include file="config/liquibase/changelog/00000000000000_initial_schema.xml" relativeToChangelogFile="false"/>
<!-- jhipster-needle-liquibase-add-changelog - JHipster will add liquibase changelogs here -->
Expand Down Expand Up @@ -1238,6 +1243,7 @@ f4d7cebb-36aa-4812-9c05-b9abb67ab7ee;false;3133;2019-12-31T18:41:05
<property name="blobType" value="blob" dbms="postgresql"/>
<property name="uuidType" value="uuid" dbms="postgresql"/>
<property name="datetimeType" value="datetime" dbms="postgresql"/>
<property name="timeType" value="time(6)" dbms="postgresql"/>

<include file="config/liquibase/changelog/00000000000000_initial_schema.xml" relativeToChangelogFile="false"/>
<include file="config/liquibase/changelog/20200101000100_added_entity_One.xml" relativeToChangelogFile="false"/>
Expand Down Expand Up @@ -1413,6 +1419,7 @@ ROLE_USER
<property name="blobType" value="blob" dbms="postgresql"/>
<property name="uuidType" value="uuid" dbms="postgresql"/>
<property name="datetimeType" value="datetime" dbms="postgresql"/>
<property name="timeType" value="time(6)" dbms="postgresql"/>

<include file="config/liquibase/changelog/00000000000000_initial_schema.xml" relativeToChangelogFile="false"/>
<!-- jhipster-needle-liquibase-add-changelog - JHipster will add liquibase changelogs here -->
Expand Down Expand Up @@ -2300,6 +2307,7 @@ abf7d979-e671-4258-8548-f4e98d56ee9c
<property name="blobType" value="blob" dbms="postgresql"/>
<property name="uuidType" value="uuid" dbms="postgresql"/>
<property name="datetimeType" value="datetime" dbms="postgresql"/>
<property name="timeType" value="time(6)" dbms="postgresql"/>

<include file="config/liquibase/changelog/00000000000000_initial_schema.xml" relativeToChangelogFile="false"/>
<include file="config/liquibase/changelog/20200101000100_added_entity_One.xml" relativeToChangelogFile="false"/>
Expand Down Expand Up @@ -2617,6 +2625,7 @@ ROLE_USER
<property name="blobType" value="blob" dbms="postgresql"/>
<property name="uuidType" value="uuid" dbms="postgresql"/>
<property name="datetimeType" value="datetime" dbms="postgresql"/>
<property name="timeType" value="time(6)" dbms="postgresql"/>

<include file="config/liquibase/changelog/00000000000000_initial_schema.xml" relativeToChangelogFile="false"/>
<include file="config/liquibase/changelog/20200101000100_added_entity_One.xml" relativeToChangelogFile="false"/>
Expand Down Expand Up @@ -2698,6 +2707,7 @@ ROLE_USER
<property name="blobType" value="blob" dbms="postgresql"/>
<property name="uuidType" value="uuid" dbms="postgresql"/>
<property name="datetimeType" value="datetime" dbms="postgresql"/>
<property name="timeType" value="time(6)" dbms="postgresql"/>

<include file="config/liquibase/changelog/00000000000000_initial_schema.xml" relativeToChangelogFile="false"/>
<include file="config/liquibase/changelog/20200101000100_added_entity_Customer.xml" relativeToChangelogFile="false"/>
Expand Down Expand Up @@ -2772,6 +2782,7 @@ ROLE_USER
<property name="blobType" value="blob" dbms="postgresql"/>
<property name="uuidType" value="uuid" dbms="postgresql"/>
<property name="datetimeType" value="datetime" dbms="postgresql"/>
<property name="timeType" value="time(6)" dbms="postgresql"/>

<include file="config/liquibase/changelog/00000000000000_initial_schema.xml" relativeToChangelogFile="false"/>
<include file="config/liquibase/changelog/20200101000100_added_entity_Customer.xml" relativeToChangelogFile="false"/>
Expand Down Expand Up @@ -2847,6 +2858,7 @@ ROLE_USER
<property name="blobType" value="blob" dbms="postgresql"/>
<property name="uuidType" value="uuid" dbms="postgresql"/>
<property name="datetimeType" value="datetime" dbms="postgresql"/>
<property name="timeType" value="time(6)" dbms="postgresql"/>

<include file="config/liquibase/changelog/00000000000000_initial_schema.xml" relativeToChangelogFile="false"/>
<include file="config/liquibase/changelog/20200101000100_added_entity_One.xml" relativeToChangelogFile="false"/>
Expand Down
13 changes: 12 additions & 1 deletion generators/liquibase/support/prepare-field.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ import type { ApplicationType } from '../../../lib/types/application/application
const { MYSQL, MARIADB } = databaseTypes;
const { CommonDBTypes, RelationalOnlyDBTypes, BlobTypes } = fieldTypes;

const { STRING, INTEGER, LONG, BIG_DECIMAL, FLOAT, DOUBLE, UUID, BOOLEAN, LOCAL_DATE, ZONED_DATE_TIME, INSTANT, DURATION } = CommonDBTypes;
const { STRING, INTEGER, LONG, BIG_DECIMAL, FLOAT, DOUBLE, UUID, BOOLEAN, LOCAL_DATE, ZONED_DATE_TIME, INSTANT, DURATION, LOCAL_TIME } =
CommonDBTypes;
const { BYTES } = RelationalOnlyDBTypes;
const { TEXT } = BlobTypes;

Expand Down Expand Up @@ -74,6 +75,11 @@ function parseLiquibaseColumnType(field: Field) {
return 'bigint';
}

if (fieldType === LOCAL_TIME) {
// eslint-disable-next-line no-template-curly-in-string
return '${timeType}';
}

if (fieldType === UUID) {
// eslint-disable-next-line no-template-curly-in-string
return '${uuidType}';
Expand Down Expand Up @@ -112,6 +118,11 @@ function parseLiquibaseLoadColumnType(application: ApplicationType, field: Field
return 'date';
}

// eslint-disable-next-line no-template-curly-in-string
if (columnType === '${timeType}') {
return 'time';
}

if (columnType === 'boolean') {
return columnType;
}
Expand Down
Loading
Loading