Skip to content

Commit

Permalink
Add support for plain Time fields
Browse files Browse the repository at this point in the history
Fix #28406
  • Loading branch information
OmarHawk committed Jan 16, 2025
1 parent 3cff6a2 commit bdd352a
Show file tree
Hide file tree
Showing 33 changed files with 151 additions and 10 deletions.
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

0 comments on commit bdd352a

Please sign in to comment.