From a33d4c8b8dae7ab8ee0cedf49c4f27d7df4747cd Mon Sep 17 00:00:00 2001 From: Weiko Date: Tue, 21 Nov 2023 00:16:42 +0100 Subject: [PATCH] Rename DATE to DATETIME (#2576) * Rename DATE to DATETIME * rename DATE to DATE_TIME * fix server tests * rename date to datetime * rename date to datetime --- front/src/generated-metadata/graphql.ts | 24 +++++++++++++++---- front/src/generated/graphql.tsx | 2 +- .../useMapFieldMetadataToGraphQLQuery.ts | 3 +-- ...atFieldMetadataItemsAsFilterDefinitions.ts | 6 ++--- ...rmatFieldMetadataItemsAsSortDefinitions.ts | 2 +- .../SettingsObjectFieldTypeSelectSection.tsx | 2 +- .../data-model/constants/dataTypes.ts | 4 ++-- .../data-model/types/ObjectFieldDataType.ts | 2 +- .../object/field/components/FieldDisplay.tsx | 4 ++-- .../ui/object/field/components/FieldInput.tsx | 4 ++-- .../ui/object/field/hooks/usePersistField.ts | 11 +++++---- .../display/components/DateFieldDisplay.tsx | 4 ++-- .../__stories__/DateFieldDisplay.stories.tsx | 6 ++--- .../{useDateField.ts => useDateTimeField.ts} | 6 ++--- .../input/components/DateFieldInput.tsx | 4 ++-- .../__stories__/DateFieldInput.stories.tsx | 6 ++--- .../isEntityFieldEmptyFamilySelector.ts | 4 ++-- .../ui/object/field/types/FieldMetadata.ts | 6 ++--- .../ui/object/field/types/FieldType.ts | 2 +- .../field/types/guards/assertFieldMetadata.ts | 6 ++--- .../object/field/types/guards/isFieldDate.ts | 6 ----- .../field/types/guards/isFieldDateTime.ts | 7 ++++++ .../types/guards/isFieldDateTimeValue.ts | 9 +++++++ .../field/types/guards/isFieldDateValue.ts | 20 ---------------- .../MultipleFiltersDropdownContent.tsx | 2 +- .../types/FilterType.ts | 2 +- .../utils/getOperandsForFilterType.ts | 2 +- .../utils/turnFiltersIntoWhereClauseV2.ts | 2 +- .../opportunityBoardFilterDefinitions.tsx | 2 +- server/src/core/auth/auth.resolver.spec.ts | 5 ++-- .../core/auth/services/auth.service.spec.ts | 22 ++++++++++++++--- .../core/auth/services/token.service.spec.ts | 11 +++++++++ .../core/user/services/user.service.spec.ts | 10 ++++++++ .../services/workspace.service.spec.ts | 5 ++++ .../field-metadata/activity-target.ts | 4 ++-- .../metadata/field-metadata/activity.ts | 10 ++++---- .../metadata/field-metadata/api-key.ts | 8 +++---- .../metadata/field-metadata/attachment.ts | 4 ++-- .../metadata/field-metadata/comment.ts | 4 ++-- .../metadata/field-metadata/company.ts | 4 ++-- .../metadata/field-metadata/favorite.ts | 4 ++-- .../metadata/field-metadata/opportunity.ts | 6 ++--- .../metadata/field-metadata/person.ts | 4 ++-- .../metadata/field-metadata/pipeline-step.ts | 4 ++-- .../metadata/field-metadata/view-field.ts | 4 ++-- .../metadata/field-metadata/view-filter.ts | 4 ++-- .../metadata/field-metadata/view-sort.ts | 4 ++-- .../metadata/field-metadata/view.ts | 4 ++-- .../metadata/field-metadata/webhook.ts | 4 ++-- .../field-metadata/workspace-member.ts | 4 ++-- .../field-metadata/field-metadata.entity.ts | 2 +- .../field-metadata-default-value.interface.ts | 6 ++--- ...lidate-default-value-based-on-type.spec.ts | 7 ++++-- ...rt-field-metadata-to-column-action.util.ts | 4 ++-- .../utils/generate-target-column-map.util.ts | 2 +- ...lidate-default-value-based-on-type.util.ts | 4 ++-- .../object-metadata.service.ts | 4 ++-- .../standard-objects/activity.ts | 6 ++--- .../standard-objects/api-key.ts | 4 ++-- .../standard-objects/opportunity.ts | 2 +- .../standard-object-metadata.ts | 4 ++-- .../services/type-mapper.service.ts | 6 ++--- .../__tests__/get-field-metadata-type.spec.ts | 2 +- .../utils/get-field-metadata-type.util.ts | 2 +- 64 files changed, 197 insertions(+), 147 deletions(-) rename front/src/modules/ui/object/field/meta-types/hooks/{useDateField.ts => useDateTimeField.ts} (79%) delete mode 100644 front/src/modules/ui/object/field/types/guards/isFieldDate.ts create mode 100644 front/src/modules/ui/object/field/types/guards/isFieldDateTime.ts create mode 100644 front/src/modules/ui/object/field/types/guards/isFieldDateTimeValue.ts delete mode 100644 front/src/modules/ui/object/field/types/guards/isFieldDateValue.ts diff --git a/front/src/generated-metadata/graphql.ts b/front/src/generated-metadata/graphql.ts index 48d3fd79c..7dad74137 100644 --- a/front/src/generated-metadata/graphql.ts +++ b/front/src/generated-metadata/graphql.ts @@ -152,7 +152,7 @@ export type FieldDeleteResponse = { export enum FieldMetadataType { Boolean = 'BOOLEAN', Currency = 'CURRENCY', - Date = 'DATE', + DateTime = 'DATE_TIME', Email = 'EMAIL', Enum = 'ENUM', FullName = 'FULL_NAME', @@ -416,9 +416,9 @@ export type UpdateOneObjectInput = { export type User = { __typename?: 'User'; - avatarUrl: Scalars['String']['output']; canImpersonate: Scalars['Boolean']['output']; createdAt: Scalars['DateTime']['output']; + defaultWorkspace: Workspace; deletedAt?: Maybe; disabled?: Maybe; email: Scalars['String']['output']; @@ -426,11 +426,9 @@ export type User = { firstName: Scalars['String']['output']; id: Scalars['ID']['output']; lastName: Scalars['String']['output']; - lastSeen?: Maybe; - locale: Scalars['String']['output']; passwordHash?: Maybe; - phoneNumber?: Maybe; updatedAt: Scalars['DateTime']['output']; + workspaceMember: UserWorkspaceMember; }; export type UserEdge = { @@ -441,6 +439,22 @@ export type UserEdge = { node: User; }; +export type UserWorkspaceMember = { + __typename?: 'UserWorkspaceMember'; + allowImpersonation: Scalars['Boolean']['output']; + avatarUrl?: Maybe; + colorScheme: Scalars['String']['output']; + id: Scalars['ID']['output']; + locale: Scalars['String']['output']; + name: UserWorkspaceMemberName; +}; + +export type UserWorkspaceMemberName = { + __typename?: 'UserWorkspaceMemberName'; + firstName: Scalars['String']['output']; + lastName: Scalars['String']['output']; +}; + export type Workspace = { __typename?: 'Workspace'; createdAt: Scalars['DateTime']['output']; diff --git a/front/src/generated/graphql.tsx b/front/src/generated/graphql.tsx index 2139c4a91..879a3ebf3 100644 --- a/front/src/generated/graphql.tsx +++ b/front/src/generated/graphql.tsx @@ -120,7 +120,7 @@ export type FieldDeleteResponse = { export enum FieldMetadataType { Boolean = 'BOOLEAN', Currency = 'CURRENCY', - Date = 'DATE', + DateTime = 'DATE_TIME', Email = 'EMAIL', Enum = 'ENUM', FullName = 'FULL_NAME', diff --git a/front/src/modules/object-metadata/hooks/useMapFieldMetadataToGraphQLQuery.ts b/front/src/modules/object-metadata/hooks/useMapFieldMetadataToGraphQLQuery.ts index a8e3d15e5..9de0e8751 100644 --- a/front/src/modules/object-metadata/hooks/useMapFieldMetadataToGraphQLQuery.ts +++ b/front/src/modules/object-metadata/hooks/useMapFieldMetadataToGraphQLQuery.ts @@ -24,11 +24,10 @@ export const useMapFieldMetadataToGraphQLQuery = () => { 'UUID', 'TEXT', 'PHONE', - 'DATE', + 'DATE_TIME', 'EMAIL', 'NUMBER', 'BOOLEAN', - 'DATE', ] as FieldType[] ).includes(fieldType); diff --git a/front/src/modules/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions.ts b/front/src/modules/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions.ts index be0dccbf8..cff9e7a8c 100644 --- a/front/src/modules/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions.ts +++ b/front/src/modules/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions.ts @@ -11,7 +11,7 @@ export const formatFieldMetadataItemsAsFilterDefinitions = ({ fields.reduce((acc, field) => { if ( ![ - FieldMetadataType.Date, + FieldMetadataType.DateTime, FieldMetadataType.Number, FieldMetadataType.Text, ].includes(field.type) @@ -30,8 +30,8 @@ const formatFieldMetadataItemAsFilterDefinition = ({ label: field.label, iconName: field.icon ?? 'Icon123', type: - field.type === FieldMetadataType.Date - ? 'DATE' + field.type === FieldMetadataType.DateTime + ? 'DATE_TIME' : field.type === FieldMetadataType.Number ? 'NUMBER' : 'TEXT', diff --git a/front/src/modules/object-metadata/utils/formatFieldMetadataItemsAsSortDefinitions.ts b/front/src/modules/object-metadata/utils/formatFieldMetadataItemsAsSortDefinitions.ts index 3ed609e72..7c7c653bf 100644 --- a/front/src/modules/object-metadata/utils/formatFieldMetadataItemsAsSortDefinitions.ts +++ b/front/src/modules/object-metadata/utils/formatFieldMetadataItemsAsSortDefinitions.ts @@ -11,7 +11,7 @@ export const formatFieldMetadataItemsAsSortDefinitions = ({ fields.reduce((acc, field) => { if ( ![ - FieldMetadataType.Date, + FieldMetadataType.DateTime, FieldMetadataType.Number, FieldMetadataType.Text, FieldMetadataType.Boolean, diff --git a/front/src/modules/settings/data-model/components/SettingsObjectFieldTypeSelectSection.tsx b/front/src/modules/settings/data-model/components/SettingsObjectFieldTypeSelectSection.tsx index 061f83116..412e5fbc4 100644 --- a/front/src/modules/settings/data-model/components/SettingsObjectFieldTypeSelectSection.tsx +++ b/front/src/modules/settings/data-model/components/SettingsObjectFieldTypeSelectSection.tsx @@ -79,7 +79,7 @@ export const SettingsObjectFieldTypeSelectSection = ({ [ FieldMetadataType.Boolean, FieldMetadataType.Currency, - FieldMetadataType.Date, + FieldMetadataType.DateTime, FieldMetadataType.Link, FieldMetadataType.Number, FieldMetadataType.Relation, diff --git a/front/src/modules/settings/data-model/constants/dataTypes.ts b/front/src/modules/settings/data-model/constants/dataTypes.ts index 5de4b90ba..faf118579 100644 --- a/front/src/modules/settings/data-model/constants/dataTypes.ts +++ b/front/src/modules/settings/data-model/constants/dataTypes.ts @@ -48,8 +48,8 @@ export const dataTypes: Record< Icon: IconCheck, defaultValue: true, }, - [FieldMetadataType.Date]: { - label: 'Date', + [FieldMetadataType.DateTime]: { + label: 'Date & Time', Icon: IconCalendarEvent, defaultValue: defaultDateValue.toISOString(), }, diff --git a/front/src/modules/settings/data-model/types/ObjectFieldDataType.ts b/front/src/modules/settings/data-model/types/ObjectFieldDataType.ts index bf1b72f3c..ba9b57e2e 100644 --- a/front/src/modules/settings/data-model/types/ObjectFieldDataType.ts +++ b/front/src/modules/settings/data-model/types/ObjectFieldDataType.ts @@ -1,6 +1,6 @@ export type MetadataFieldDataType = | 'BOOLEAN' - | 'DATE' + | 'DATE_TIME' | 'ENUM' | 'MONEY' | 'NUMBER' diff --git a/front/src/modules/ui/object/field/components/FieldDisplay.tsx b/front/src/modules/ui/object/field/components/FieldDisplay.tsx index 41adb3d44..76cdf788c 100644 --- a/front/src/modules/ui/object/field/components/FieldDisplay.tsx +++ b/front/src/modules/ui/object/field/components/FieldDisplay.tsx @@ -16,7 +16,7 @@ import { NumberFieldDisplay } from '../meta-types/display/components/NumberField import { PhoneFieldDisplay } from '../meta-types/display/components/PhoneFieldDisplay'; import { TextFieldDisplay } from '../meta-types/display/components/TextFieldDisplay'; import { isFieldCurrency } from '../types/guards/isFieldCurrency'; -import { isFieldDate } from '../types/guards/isFieldDate'; +import { isFieldDateTime } from '../types/guards/isFieldDateTime'; import { isFieldEmail } from '../types/guards/isFieldEmail'; import { isFieldNumber } from '../types/guards/isFieldNumber'; import { isFieldPhone } from '../types/guards/isFieldPhone'; @@ -36,7 +36,7 @@ export const FieldDisplay = () => { ) : isFieldEmail(fieldDefinition) ? ( - ) : isFieldDate(fieldDefinition) ? ( + ) : isFieldDateTime(fieldDefinition) ? ( ) : isFieldNumber(fieldDefinition) ? ( diff --git a/front/src/modules/ui/object/field/components/FieldInput.tsx b/front/src/modules/ui/object/field/components/FieldInput.tsx index 9206c31de..386c8e2a8 100644 --- a/front/src/modules/ui/object/field/components/FieldInput.tsx +++ b/front/src/modules/ui/object/field/components/FieldInput.tsx @@ -18,7 +18,7 @@ import { TextFieldInput } from '../meta-types/input/components/TextFieldInput'; import { FieldInputEvent } from '../types/FieldInputEvent'; import { isFieldBoolean } from '../types/guards/isFieldBoolean'; import { isFieldCurrency } from '../types/guards/isFieldCurrency'; -import { isFieldDate } from '../types/guards/isFieldDate'; +import { isFieldDateTime } from '../types/guards/isFieldDateTime'; import { isFieldEmail } from '../types/guards/isFieldEmail'; import { isFieldLink } from '../types/guards/isFieldLink'; import { isFieldNumber } from '../types/guards/isFieldNumber'; @@ -78,7 +78,7 @@ export const FieldInput = ({ onTab={onTab} onShiftTab={onShiftTab} /> - ) : isFieldDate(fieldDefinition) ? ( + ) : isFieldDateTime(fieldDefinition) ? ( { const fieldIsEmail = isFieldEmail(fieldDefinition) && isFieldEmailValue(valueToPersist); - const fieldIsDate = - isFieldDate(fieldDefinition) && isFieldDateValue(valueToPersist); + const fieldIsDateTime = + isFieldDateTime(fieldDefinition) && + isFieldDateTimeValue(valueToPersist); const fieldIsLink = isFieldLink(fieldDefinition) && isFieldLinkValue(valueToPersist); @@ -101,7 +102,7 @@ export const usePersistField = () => { fieldIsEmail || fieldIsProbability || fieldIsNumber || - fieldIsDate || + fieldIsDateTime || fieldIsPhone || fieldIsLink || fieldIsCurrency || diff --git a/front/src/modules/ui/object/field/meta-types/display/components/DateFieldDisplay.tsx b/front/src/modules/ui/object/field/meta-types/display/components/DateFieldDisplay.tsx index dc1a5f711..7ee25d7a4 100644 --- a/front/src/modules/ui/object/field/meta-types/display/components/DateFieldDisplay.tsx +++ b/front/src/modules/ui/object/field/meta-types/display/components/DateFieldDisplay.tsx @@ -1,9 +1,9 @@ import { DateDisplay } from '@/ui/object/field/meta-types/display/content-display/components/DateDisplay'; -import { useDateField } from '../../hooks/useDateField'; +import { useDateTimeField } from '../../hooks/useDateTimeField'; export const DateFieldDisplay = () => { - const { fieldValue } = useDateField(); + const { fieldValue } = useDateTimeField(); return ; }; diff --git a/front/src/modules/ui/object/field/meta-types/display/components/__stories__/DateFieldDisplay.stories.tsx b/front/src/modules/ui/object/field/meta-types/display/components/__stories__/DateFieldDisplay.stories.tsx index 253d815bf..c37ae761d 100644 --- a/front/src/modules/ui/object/field/meta-types/display/components/__stories__/DateFieldDisplay.stories.tsx +++ b/front/src/modules/ui/object/field/meta-types/display/components/__stories__/DateFieldDisplay.stories.tsx @@ -4,13 +4,13 @@ import { Meta, StoryObj } from '@storybook/react'; import { ComponentDecorator } from '~/testing/decorators/ComponentDecorator'; import { FieldContext } from '../../../../contexts/FieldContext'; -import { useDateField } from '../../../hooks/useDateField'; +import { useDateTimeField } from '../../../hooks/useDateTimeField'; import { DateFieldDisplay } from '../DateFieldDisplay'; const formattedDate = new Date('2023-04-01'); const DateFieldValueSetterEffect = ({ value }: { value: string }) => { - const { setFieldValue } = useDateField(); + const { setFieldValue } = useDateTimeField(); useEffect(() => { setFieldValue(value); @@ -30,7 +30,7 @@ const meta: Meta = { fieldDefinition: { fieldMetadataId: 'date', label: 'Date', - type: 'DATE', + type: 'DATE_TIME', iconName: 'IconCalendarEvent', metadata: { fieldName: 'Date', diff --git a/front/src/modules/ui/object/field/meta-types/hooks/useDateField.ts b/front/src/modules/ui/object/field/meta-types/hooks/useDateTimeField.ts similarity index 79% rename from front/src/modules/ui/object/field/meta-types/hooks/useDateField.ts rename to front/src/modules/ui/object/field/meta-types/hooks/useDateTimeField.ts index cd4deca74..b5d153292 100644 --- a/front/src/modules/ui/object/field/meta-types/hooks/useDateField.ts +++ b/front/src/modules/ui/object/field/meta-types/hooks/useDateTimeField.ts @@ -4,12 +4,12 @@ import { useRecoilState } from 'recoil'; import { FieldContext } from '../../contexts/FieldContext'; import { entityFieldsFamilySelector } from '../../states/selectors/entityFieldsFamilySelector'; import { assertFieldMetadata } from '../../types/guards/assertFieldMetadata'; -import { isFieldDate } from '../../types/guards/isFieldDate'; +import { isFieldDateTime } from '../../types/guards/isFieldDateTime'; -export const useDateField = () => { +export const useDateTimeField = () => { const { entityId, fieldDefinition, hotkeyScope } = useContext(FieldContext); - assertFieldMetadata('DATE', isFieldDate, fieldDefinition); + assertFieldMetadata('DATE_TIME', isFieldDateTime, fieldDefinition); const fieldName = fieldDefinition.metadata.fieldName; diff --git a/front/src/modules/ui/object/field/meta-types/input/components/DateFieldInput.tsx b/front/src/modules/ui/object/field/meta-types/input/components/DateFieldInput.tsx index 847d3d434..c10ae8636 100644 --- a/front/src/modules/ui/object/field/meta-types/input/components/DateFieldInput.tsx +++ b/front/src/modules/ui/object/field/meta-types/input/components/DateFieldInput.tsx @@ -2,7 +2,7 @@ import { DateInput } from '@/ui/object/field/meta-types/input/components/interna import { Nullable } from '~/types/Nullable'; import { usePersistField } from '../../../hooks/usePersistField'; -import { useDateField } from '../../hooks/useDateField'; +import { useDateTimeField } from '../../hooks/useDateTimeField'; export type FieldInputEvent = (persist: () => void) => void; @@ -19,7 +19,7 @@ export const DateFieldInput = ({ onEscape, onClickOutside, }: DateFieldInputProps) => { - const { fieldValue, hotkeyScope } = useDateField(); + const { fieldValue, hotkeyScope } = useDateTimeField(); const persistField = usePersistField(); diff --git a/front/src/modules/ui/object/field/meta-types/input/components/__stories__/DateFieldInput.stories.tsx b/front/src/modules/ui/object/field/meta-types/input/components/__stories__/DateFieldInput.stories.tsx index 7c6ef64fa..e96f1de8b 100644 --- a/front/src/modules/ui/object/field/meta-types/input/components/__stories__/DateFieldInput.stories.tsx +++ b/front/src/modules/ui/object/field/meta-types/input/components/__stories__/DateFieldInput.stories.tsx @@ -6,13 +6,13 @@ import { userEvent, within } from '@storybook/testing-library'; import { useSetHotkeyScope } from '@/ui/utilities/hotkey/hooks/useSetHotkeyScope'; import { FieldContextProvider } from '../../../__stories__/FieldContextProvider'; -import { useDateField } from '../../../hooks/useDateField'; +import { useDateTimeField } from '../../../hooks/useDateTimeField'; import { DateFieldInput, DateFieldInputProps } from '../DateFieldInput'; const formattedDate = new Date(); const DateFieldValueSetterEffect = ({ value }: { value: Date }) => { - const { setFieldValue } = useDateField(); + const { setFieldValue } = useDateTimeField(); useEffect(() => { setFieldValue(value.toISOString()); @@ -45,7 +45,7 @@ const DateFieldInputWithContext = ({ fieldDefinition={{ fieldMetadataId: 'date', label: 'Date', - type: 'DATE', + type: 'DATE_TIME', iconName: 'IconCalendarEvent', metadata: { fieldName: 'Date', diff --git a/front/src/modules/ui/object/field/states/selectors/isEntityFieldEmptyFamilySelector.ts b/front/src/modules/ui/object/field/states/selectors/isEntityFieldEmptyFamilySelector.ts index b2ad90ccd..245bda459 100644 --- a/front/src/modules/ui/object/field/states/selectors/isEntityFieldEmptyFamilySelector.ts +++ b/front/src/modules/ui/object/field/states/selectors/isEntityFieldEmptyFamilySelector.ts @@ -10,7 +10,7 @@ import { FieldMetadata } from '../../types/FieldMetadata'; import { isFieldBoolean } from '../../types/guards/isFieldBoolean'; import { isFieldCurrency } from '../../types/guards/isFieldCurrency'; import { isFieldCurrencyValue } from '../../types/guards/isFieldCurrencyValue'; -import { isFieldDate } from '../../types/guards/isFieldDate'; +import { isFieldDateTime } from '../../types/guards/isFieldDateTime'; import { isFieldEmail } from '../../types/guards/isFieldEmail'; import { isFieldLink } from '../../types/guards/isFieldLink'; import { isFieldLinkValue } from '../../types/guards/isFieldLinkValue'; @@ -39,7 +39,7 @@ export const isEntityFieldEmptyFamilySelector = selectorFamily({ if ( isFieldUuid(fieldDefinition) || isFieldText(fieldDefinition) || - isFieldDate(fieldDefinition) || + isFieldDateTime(fieldDefinition) || isFieldNumber(fieldDefinition) || isFieldProbability(fieldDefinition) || isFieldEmail(fieldDefinition) || diff --git a/front/src/modules/ui/object/field/types/FieldMetadata.ts b/front/src/modules/ui/object/field/types/FieldMetadata.ts index 67a1c9be0..704849463 100644 --- a/front/src/modules/ui/object/field/types/FieldMetadata.ts +++ b/front/src/modules/ui/object/field/types/FieldMetadata.ts @@ -14,7 +14,7 @@ export type FieldTextMetadata = { fieldName: string; }; -export type FieldDateMetadata = { +export type FieldDateTimeMetadata = { placeHolder: string; fieldName: string; }; @@ -74,7 +74,7 @@ export type FieldRelationMetadata = { export type FieldMetadata = | FieldBooleanMetadata | FieldNumberMetadata - | FieldDateMetadata + | FieldDateTimeMetadata | FieldTextMetadata | FieldUuidMetadata | FieldCurrencyMetadata @@ -87,7 +87,7 @@ export type FieldMetadata = export type FieldTextValue = string; export type FieldUUidValue = string; -export type FieldDateValue = string | null; +export type FieldDateTimeValue = string | null; export type FieldNumberValue = number | null; export type FieldBooleanValue = boolean; diff --git a/front/src/modules/ui/object/field/types/FieldType.ts b/front/src/modules/ui/object/field/types/FieldType.ts index 77341cb71..7d1f08974 100644 --- a/front/src/modules/ui/object/field/types/FieldType.ts +++ b/front/src/modules/ui/object/field/types/FieldType.ts @@ -4,7 +4,7 @@ export type FieldType = | 'TEXT' | 'RELATION' | 'CHIP' - | 'DATE' + | 'DATE_TIME' | 'DOUBLE_TEXT_CHIP' | 'DOUBLE_TEXT' | 'EMAIL' diff --git a/front/src/modules/ui/object/field/types/guards/assertFieldMetadata.ts b/front/src/modules/ui/object/field/types/guards/assertFieldMetadata.ts index 414cfc6cb..8fec0dd26 100644 --- a/front/src/modules/ui/object/field/types/guards/assertFieldMetadata.ts +++ b/front/src/modules/ui/object/field/types/guards/assertFieldMetadata.ts @@ -2,7 +2,7 @@ import { FieldDefinition } from '../FieldDefinition'; import { FieldBooleanMetadata, FieldCurrencyMetadata, - FieldDateMetadata, + FieldDateTimeMetadata, FieldEmailMetadata, FieldFullNameMetadata, FieldLinkMetadata, @@ -24,8 +24,8 @@ type AssertFieldMetadataFunction = < ? FieldCurrencyMetadata : E extends 'FULL_NAME' ? FieldFullNameMetadata - : E extends 'DATE' - ? FieldDateMetadata + : E extends 'DATE_TIME' + ? FieldDateTimeMetadata : E extends 'EMAIL' ? FieldEmailMetadata : E extends 'LINK' diff --git a/front/src/modules/ui/object/field/types/guards/isFieldDate.ts b/front/src/modules/ui/object/field/types/guards/isFieldDate.ts deleted file mode 100644 index 513d41256..000000000 --- a/front/src/modules/ui/object/field/types/guards/isFieldDate.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { FieldDefinition } from '../FieldDefinition'; -import { FieldDateMetadata, FieldMetadata } from '../FieldMetadata'; - -export const isFieldDate = ( - field: Pick, 'type'>, -): field is FieldDefinition => field.type === 'DATE'; diff --git a/front/src/modules/ui/object/field/types/guards/isFieldDateTime.ts b/front/src/modules/ui/object/field/types/guards/isFieldDateTime.ts new file mode 100644 index 000000000..f98fa6846 --- /dev/null +++ b/front/src/modules/ui/object/field/types/guards/isFieldDateTime.ts @@ -0,0 +1,7 @@ +import { FieldDefinition } from '../FieldDefinition'; +import { FieldDateTimeMetadata, FieldMetadata } from '../FieldMetadata'; + +export const isFieldDateTime = ( + field: Pick, 'type'>, +): field is FieldDefinition => + field.type === 'DATE_TIME'; diff --git a/front/src/modules/ui/object/field/types/guards/isFieldDateTimeValue.ts b/front/src/modules/ui/object/field/types/guards/isFieldDateTimeValue.ts new file mode 100644 index 000000000..7222b1cd5 --- /dev/null +++ b/front/src/modules/ui/object/field/types/guards/isFieldDateTimeValue.ts @@ -0,0 +1,9 @@ +import { isString } from '@sniptt/guards'; + +import { FieldDateTimeValue } from '../FieldMetadata'; + +// TODO: add zod +export const isFieldDateTimeValue = ( + fieldValue: unknown, +): fieldValue is FieldDateTimeValue => + isString(fieldValue) && !isNaN(Date.parse(fieldValue)); diff --git a/front/src/modules/ui/object/field/types/guards/isFieldDateValue.ts b/front/src/modules/ui/object/field/types/guards/isFieldDateValue.ts deleted file mode 100644 index 4ea3a44b1..000000000 --- a/front/src/modules/ui/object/field/types/guards/isFieldDateValue.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { isNull, isString } from '@sniptt/guards'; - -import { formatToHumanReadableDate } from '~/utils'; - -import { FieldDateValue } from '../FieldMetadata'; - -// TODO: add zod -export const isFieldDateValue = ( - fieldValue: unknown, -): fieldValue is FieldDateValue => { - try { - if (isNull(fieldValue)) return true; - if (isString(fieldValue)) { - formatToHumanReadableDate(fieldValue); - return true; - } - } catch {} - - return false; -}; diff --git a/front/src/modules/ui/object/object-filter-dropdown/components/MultipleFiltersDropdownContent.tsx b/front/src/modules/ui/object/object-filter-dropdown/components/MultipleFiltersDropdownContent.tsx index e24d298f1..6a28785dc 100644 --- a/front/src/modules/ui/object/object-filter-dropdown/components/MultipleFiltersDropdownContent.tsx +++ b/front/src/modules/ui/object/object-filter-dropdown/components/MultipleFiltersDropdownContent.tsx @@ -36,7 +36,7 @@ export const MultipleFiltersDropdownContent = () => { {filterDefinitionUsedInDropdown.type === 'NUMBER' && ( )} - {filterDefinitionUsedInDropdown.type === 'DATE' && ( + {filterDefinitionUsedInDropdown.type === 'DATE_TIME' && ( )} {filterDefinitionUsedInDropdown.type === 'ENTITY' && ( diff --git a/front/src/modules/ui/object/object-filter-dropdown/types/FilterType.ts b/front/src/modules/ui/object/object-filter-dropdown/types/FilterType.ts index 4445d5426..bf9d3d58c 100644 --- a/front/src/modules/ui/object/object-filter-dropdown/types/FilterType.ts +++ b/front/src/modules/ui/object/object-filter-dropdown/types/FilterType.ts @@ -1 +1 @@ -export type FilterType = 'TEXT' | 'DATE' | 'ENTITY' | 'NUMBER'; +export type FilterType = 'TEXT' | 'DATE_TIME' | 'ENTITY' | 'NUMBER'; diff --git a/front/src/modules/ui/object/object-filter-dropdown/utils/getOperandsForFilterType.ts b/front/src/modules/ui/object/object-filter-dropdown/utils/getOperandsForFilterType.ts index 8d9515ba8..d3529c9f1 100644 --- a/front/src/modules/ui/object/object-filter-dropdown/utils/getOperandsForFilterType.ts +++ b/front/src/modules/ui/object/object-filter-dropdown/utils/getOperandsForFilterType.ts @@ -9,7 +9,7 @@ export const getOperandsForFilterType = ( case 'TEXT': return [ViewFilterOperand.Contains, ViewFilterOperand.DoesNotContain]; case 'NUMBER': - case 'DATE': + case 'DATE_TIME': return [ViewFilterOperand.GreaterThan, ViewFilterOperand.LessThan]; case 'ENTITY': return [ViewFilterOperand.Is, ViewFilterOperand.IsNot]; diff --git a/front/src/modules/ui/object/object-filter-dropdown/utils/turnFiltersIntoWhereClauseV2.ts b/front/src/modules/ui/object/object-filter-dropdown/utils/turnFiltersIntoWhereClauseV2.ts index 63c4ab25e..01f84c1f7 100644 --- a/front/src/modules/ui/object/object-filter-dropdown/utils/turnFiltersIntoWhereClauseV2.ts +++ b/front/src/modules/ui/object/object-filter-dropdown/utils/turnFiltersIntoWhereClauseV2.ts @@ -62,7 +62,7 @@ export const turnFiltersIntoWhereClauseV2 = ( `Unknown operand ${filter.operand} for ${filter.definition.type} filter`, ); } - case 'DATE': + case 'DATE_TIME': switch (filter.operand) { case ViewFilterOperand.GreaterThan: whereClause[correspondingField.name] = { diff --git a/front/src/pages/opportunities/constants/opportunityBoardFilterDefinitions.tsx b/front/src/pages/opportunities/constants/opportunityBoardFilterDefinitions.tsx index cb39b522d..9b71f1969 100644 --- a/front/src/pages/opportunities/constants/opportunityBoardFilterDefinitions.tsx +++ b/front/src/pages/opportunities/constants/opportunityBoardFilterDefinitions.tsx @@ -13,7 +13,7 @@ export const opportunityBoardFilterDefinitions: FilterDefinitionByEntity { providers: [ AuthResolver, { - provide: WorkspaceService, + provide: getRepositoryToken(Workspace), useValue: {}, }, { diff --git a/server/src/core/auth/services/auth.service.spec.ts b/server/src/core/auth/services/auth.service.spec.ts index 271f8a7b2..45db1d84f 100644 --- a/server/src/core/auth/services/auth.service.spec.ts +++ b/server/src/core/auth/services/auth.service.spec.ts @@ -1,7 +1,11 @@ import { Test, TestingModule } from '@nestjs/testing'; +import { getRepositoryToken } from '@nestjs/typeorm'; -import { UserService } from 'src/core/user/user.service'; -import { WorkspaceService } from 'src/core/workspace/services/workspace.service'; +import { UserService } from 'src/core/user/services/user.service'; +import { WorkspaceManagerService } from 'src/workspace/workspace-manager/workspace-manager.service'; +import { FileUploadService } from 'src/core/file/services/file-upload.service'; +import { Workspace } from 'src/core/workspace/workspace.entity'; +import { User } from 'src/core/user/user.entity'; import { AuthService } from './auth.service'; import { TokenService } from './token.service'; @@ -22,7 +26,19 @@ describe('AuthService', () => { useValue: {}, }, { - provide: WorkspaceService, + provide: WorkspaceManagerService, + useValue: {}, + }, + { + provide: FileUploadService, + useValue: {}, + }, + { + provide: getRepositoryToken(Workspace), + useValue: {}, + }, + { + provide: getRepositoryToken(User), useValue: {}, }, ], diff --git a/server/src/core/auth/services/token.service.spec.ts b/server/src/core/auth/services/token.service.spec.ts index 19aecaaed..c3ad50d3b 100644 --- a/server/src/core/auth/services/token.service.spec.ts +++ b/server/src/core/auth/services/token.service.spec.ts @@ -1,7 +1,10 @@ import { Test, TestingModule } from '@nestjs/testing'; import { JwtService } from '@nestjs/jwt'; +import { getRepositoryToken } from '@nestjs/typeorm'; import { EnvironmentService } from 'src/integrations/environment/environment.service'; +import { RefreshToken } from 'src/core/refresh-token/refresh-token.entity'; +import { User } from 'src/core/user/user.entity'; import { TokenService } from './token.service'; @@ -20,6 +23,14 @@ describe('TokenService', () => { provide: EnvironmentService, useValue: {}, }, + { + provide: getRepositoryToken(User), + useValue: {}, + }, + { + provide: getRepositoryToken(RefreshToken), + useValue: {}, + }, ], }).compile(); diff --git a/server/src/core/user/services/user.service.spec.ts b/server/src/core/user/services/user.service.spec.ts index 7bfccb0fa..92de42d5b 100644 --- a/server/src/core/user/services/user.service.spec.ts +++ b/server/src/core/user/services/user.service.spec.ts @@ -2,6 +2,8 @@ import { Test, TestingModule } from '@nestjs/testing'; import { getRepositoryToken } from '@nestjs/typeorm'; import { User } from 'src/core/user/user.entity'; +import { DataSourceService } from 'src/metadata/data-source/data-source.service'; +import { TypeORMService } from 'src/database/typeorm/typeorm.service'; import { UserService } from './user.service'; @@ -16,6 +18,14 @@ describe('UserService', () => { provide: getRepositoryToken(User), useValue: {}, }, + { + provide: DataSourceService, + useValue: {}, + }, + { + provide: TypeORMService, + useValue: {}, + }, ], }).compile(); diff --git a/server/src/core/workspace/services/workspace.service.spec.ts b/server/src/core/workspace/services/workspace.service.spec.ts index 51d3a7e6d..e7a7411f7 100644 --- a/server/src/core/workspace/services/workspace.service.spec.ts +++ b/server/src/core/workspace/services/workspace.service.spec.ts @@ -2,6 +2,7 @@ import { Test, TestingModule } from '@nestjs/testing'; import { getRepositoryToken } from '@nestjs/typeorm'; import { Workspace } from 'src/core/workspace/workspace.entity'; +import { WorkspaceManagerService } from 'src/workspace/workspace-manager/workspace-manager.service'; import { WorkspaceService } from './workspace.service'; @@ -16,6 +17,10 @@ describe('WorkspaceService', () => { provide: getRepositoryToken(Workspace), useValue: {}, }, + { + provide: WorkspaceManagerService, + useValue: {}, + }, ], }).compile(); diff --git a/server/src/database/typeorm-seeds/metadata/field-metadata/activity-target.ts b/server/src/database/typeorm-seeds/metadata/field-metadata/activity-target.ts index e16cd8ea3..db80467d5 100644 --- a/server/src/database/typeorm-seeds/metadata/field-metadata/activity-target.ts +++ b/server/src/database/typeorm-seeds/metadata/field-metadata/activity-target.ts @@ -69,7 +69,7 @@ export const seedActivityTargetFieldMetadata = async ( isCustom: false, workspaceId: SeedWorkspaceId, isActive: true, - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, name: 'createdAt', label: 'Creation date', targetColumnMap: { @@ -87,7 +87,7 @@ export const seedActivityTargetFieldMetadata = async ( isCustom: false, workspaceId: SeedWorkspaceId, isActive: true, - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, name: 'updatedAt', label: 'Update date', targetColumnMap: { diff --git a/server/src/database/typeorm-seeds/metadata/field-metadata/activity.ts b/server/src/database/typeorm-seeds/metadata/field-metadata/activity.ts index 9440bd580..70bbfa783 100644 --- a/server/src/database/typeorm-seeds/metadata/field-metadata/activity.ts +++ b/server/src/database/typeorm-seeds/metadata/field-metadata/activity.ts @@ -77,7 +77,7 @@ export const seedActivityFieldMetadata = async ( isCustom: false, workspaceId: SeedWorkspaceId, isActive: true, - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, name: 'createdAt', label: 'Creation date', targetColumnMap: { @@ -95,7 +95,7 @@ export const seedActivityFieldMetadata = async ( isCustom: false, workspaceId: SeedWorkspaceId, isActive: true, - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, name: 'updatedAt', label: 'Update date', targetColumnMap: { @@ -170,7 +170,7 @@ export const seedActivityFieldMetadata = async ( isCustom: false, workspaceId: SeedWorkspaceId, isActive: true, - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, name: 'reminderAt', label: 'Reminder Date', targetColumnMap: { @@ -188,7 +188,7 @@ export const seedActivityFieldMetadata = async ( isCustom: false, workspaceId: SeedWorkspaceId, isActive: true, - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, name: 'dueAt', label: 'Due Date', targetColumnMap: { @@ -206,7 +206,7 @@ export const seedActivityFieldMetadata = async ( isCustom: false, workspaceId: SeedWorkspaceId, isActive: true, - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, name: 'completedAt', label: 'Completion Date', targetColumnMap: { diff --git a/server/src/database/typeorm-seeds/metadata/field-metadata/api-key.ts b/server/src/database/typeorm-seeds/metadata/field-metadata/api-key.ts index 2fe62c37d..ed815c36e 100644 --- a/server/src/database/typeorm-seeds/metadata/field-metadata/api-key.ts +++ b/server/src/database/typeorm-seeds/metadata/field-metadata/api-key.ts @@ -66,7 +66,7 @@ export const seedApiKeyFieldMetadata = async ( isCustom: false, workspaceId: SeedWorkspaceId, isActive: true, - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, name: 'createdAt', label: 'Creation date', targetColumnMap: { @@ -84,7 +84,7 @@ export const seedApiKeyFieldMetadata = async ( isCustom: false, workspaceId: SeedWorkspaceId, isActive: true, - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, name: 'updatedAt', label: 'Update date', targetColumnMap: { @@ -121,7 +121,7 @@ export const seedApiKeyFieldMetadata = async ( isCustom: false, workspaceId: SeedWorkspaceId, isActive: true, - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, name: 'expiresAt', label: 'Expiration date', targetColumnMap: { @@ -139,7 +139,7 @@ export const seedApiKeyFieldMetadata = async ( isCustom: false, workspaceId: SeedWorkspaceId, isActive: true, - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, name: 'revokedAt', label: 'Revocation date', targetColumnMap: { diff --git a/server/src/database/typeorm-seeds/metadata/field-metadata/attachment.ts b/server/src/database/typeorm-seeds/metadata/field-metadata/attachment.ts index 6d0bcc2d7..a2b72a759 100644 --- a/server/src/database/typeorm-seeds/metadata/field-metadata/attachment.ts +++ b/server/src/database/typeorm-seeds/metadata/field-metadata/attachment.ts @@ -75,7 +75,7 @@ export const seedAttachmentFieldMetadata = async ( isCustom: false, workspaceId: SeedWorkspaceId, isActive: true, - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, name: 'createdAt', label: 'Creation date', targetColumnMap: { @@ -93,7 +93,7 @@ export const seedAttachmentFieldMetadata = async ( isCustom: false, workspaceId: SeedWorkspaceId, isActive: true, - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, name: 'updatedAt', label: 'Update date', targetColumnMap: { diff --git a/server/src/database/typeorm-seeds/metadata/field-metadata/comment.ts b/server/src/database/typeorm-seeds/metadata/field-metadata/comment.ts index 4dfa110f8..aaf97ac0f 100644 --- a/server/src/database/typeorm-seeds/metadata/field-metadata/comment.ts +++ b/server/src/database/typeorm-seeds/metadata/field-metadata/comment.ts @@ -68,7 +68,7 @@ export const seedCommentFieldMetadata = async ( isCustom: false, workspaceId: SeedWorkspaceId, isActive: true, - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, name: 'createdAt', label: 'Creation date', targetColumnMap: { @@ -86,7 +86,7 @@ export const seedCommentFieldMetadata = async ( isCustom: false, workspaceId: SeedWorkspaceId, isActive: true, - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, name: 'updatedAt', label: 'Update date', targetColumnMap: { diff --git a/server/src/database/typeorm-seeds/metadata/field-metadata/company.ts b/server/src/database/typeorm-seeds/metadata/field-metadata/company.ts index fecd9558b..3904b4bfd 100644 --- a/server/src/database/typeorm-seeds/metadata/field-metadata/company.ts +++ b/server/src/database/typeorm-seeds/metadata/field-metadata/company.ts @@ -80,7 +80,7 @@ export const seedCompanyFieldMetadata = async ( isCustom: false, workspaceId: SeedWorkspaceId, isActive: true, - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, name: 'createdAt', label: 'Creation date', targetColumnMap: { @@ -98,7 +98,7 @@ export const seedCompanyFieldMetadata = async ( isCustom: false, workspaceId: SeedWorkspaceId, isActive: true, - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, name: 'updatedAt', label: 'Update date', targetColumnMap: { diff --git a/server/src/database/typeorm-seeds/metadata/field-metadata/favorite.ts b/server/src/database/typeorm-seeds/metadata/field-metadata/favorite.ts index 615943bbf..10f39f8d0 100644 --- a/server/src/database/typeorm-seeds/metadata/field-metadata/favorite.ts +++ b/server/src/database/typeorm-seeds/metadata/field-metadata/favorite.ts @@ -71,7 +71,7 @@ export const seedFavoriteFieldMetadata = async ( isCustom: false, workspaceId: SeedWorkspaceId, isActive: true, - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, name: 'createdAt', label: 'Creation date', targetColumnMap: { @@ -89,7 +89,7 @@ export const seedFavoriteFieldMetadata = async ( isCustom: false, workspaceId: SeedWorkspaceId, isActive: true, - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, name: 'updatedAt', label: 'Update date', targetColumnMap: { diff --git a/server/src/database/typeorm-seeds/metadata/field-metadata/opportunity.ts b/server/src/database/typeorm-seeds/metadata/field-metadata/opportunity.ts index a503628b5..fff9d377c 100644 --- a/server/src/database/typeorm-seeds/metadata/field-metadata/opportunity.ts +++ b/server/src/database/typeorm-seeds/metadata/field-metadata/opportunity.ts @@ -75,7 +75,7 @@ export const seedOpportunityFieldMetadata = async ( isCustom: false, workspaceId: SeedWorkspaceId, isActive: true, - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, name: 'createdAt', label: 'Creation date', targetColumnMap: { @@ -93,7 +93,7 @@ export const seedOpportunityFieldMetadata = async ( isCustom: false, workspaceId: SeedWorkspaceId, isActive: true, - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, name: 'updatedAt', label: 'Update date', targetColumnMap: { @@ -131,7 +131,7 @@ export const seedOpportunityFieldMetadata = async ( isCustom: false, workspaceId: SeedWorkspaceId, isActive: true, - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, name: 'closeDate', label: 'Close date', targetColumnMap: { diff --git a/server/src/database/typeorm-seeds/metadata/field-metadata/person.ts b/server/src/database/typeorm-seeds/metadata/field-metadata/person.ts index ff3119012..58f8b62a4 100644 --- a/server/src/database/typeorm-seeds/metadata/field-metadata/person.ts +++ b/server/src/database/typeorm-seeds/metadata/field-metadata/person.ts @@ -80,7 +80,7 @@ export const seedPersonFieldMetadata = async ( isCustom: false, workspaceId: SeedWorkspaceId, isActive: true, - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, name: 'createdAt', label: 'Creation date', targetColumnMap: { @@ -98,7 +98,7 @@ export const seedPersonFieldMetadata = async ( isCustom: false, workspaceId: SeedWorkspaceId, isActive: true, - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, name: 'updatedAt', label: 'Update date', targetColumnMap: { diff --git a/server/src/database/typeorm-seeds/metadata/field-metadata/pipeline-step.ts b/server/src/database/typeorm-seeds/metadata/field-metadata/pipeline-step.ts index b66fb3085..2ec3e5fc4 100644 --- a/server/src/database/typeorm-seeds/metadata/field-metadata/pipeline-step.ts +++ b/server/src/database/typeorm-seeds/metadata/field-metadata/pipeline-step.ts @@ -67,7 +67,7 @@ export const seedPipelineStepFieldMetadata = async ( isCustom: false, workspaceId: SeedWorkspaceId, isActive: true, - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, name: 'createdAt', label: 'Creation date', targetColumnMap: { @@ -85,7 +85,7 @@ export const seedPipelineStepFieldMetadata = async ( isCustom: false, workspaceId: SeedWorkspaceId, isActive: true, - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, name: 'updatedAt', label: 'Update date', targetColumnMap: { diff --git a/server/src/database/typeorm-seeds/metadata/field-metadata/view-field.ts b/server/src/database/typeorm-seeds/metadata/field-metadata/view-field.ts index 19a0c60f1..2dbc7062e 100644 --- a/server/src/database/typeorm-seeds/metadata/field-metadata/view-field.ts +++ b/server/src/database/typeorm-seeds/metadata/field-metadata/view-field.ts @@ -69,7 +69,7 @@ export const seedViewFieldFieldMetadata = async ( isCustom: false, workspaceId: SeedWorkspaceId, isActive: true, - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, name: 'createdAt', label: 'Creation date', targetColumnMap: { @@ -87,7 +87,7 @@ export const seedViewFieldFieldMetadata = async ( isCustom: false, workspaceId: SeedWorkspaceId, isActive: true, - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, name: 'updatedAt', label: 'Update date', targetColumnMap: { diff --git a/server/src/database/typeorm-seeds/metadata/field-metadata/view-filter.ts b/server/src/database/typeorm-seeds/metadata/field-metadata/view-filter.ts index 958386e94..0ae7c1ba0 100644 --- a/server/src/database/typeorm-seeds/metadata/field-metadata/view-filter.ts +++ b/server/src/database/typeorm-seeds/metadata/field-metadata/view-filter.ts @@ -69,7 +69,7 @@ export const seedViewFilterFieldMetadata = async ( isCustom: false, workspaceId: SeedWorkspaceId, isActive: true, - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, name: 'createdAt', label: 'Creation date', targetColumnMap: { @@ -87,7 +87,7 @@ export const seedViewFilterFieldMetadata = async ( isCustom: false, workspaceId: SeedWorkspaceId, isActive: true, - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, name: 'updatedAt', label: 'Update date', targetColumnMap: { diff --git a/server/src/database/typeorm-seeds/metadata/field-metadata/view-sort.ts b/server/src/database/typeorm-seeds/metadata/field-metadata/view-sort.ts index ccf971fb5..94db8fb08 100644 --- a/server/src/database/typeorm-seeds/metadata/field-metadata/view-sort.ts +++ b/server/src/database/typeorm-seeds/metadata/field-metadata/view-sort.ts @@ -67,7 +67,7 @@ export const seedViewSortFieldMetadata = async ( isCustom: false, workspaceId: SeedWorkspaceId, isActive: true, - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, name: 'createdAt', label: 'Creation date', targetColumnMap: { @@ -85,7 +85,7 @@ export const seedViewSortFieldMetadata = async ( isCustom: false, workspaceId: SeedWorkspaceId, isActive: true, - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, name: 'updatedAt', label: 'Update date', targetColumnMap: { diff --git a/server/src/database/typeorm-seeds/metadata/field-metadata/view.ts b/server/src/database/typeorm-seeds/metadata/field-metadata/view.ts index 1e85d3512..797ec2924 100644 --- a/server/src/database/typeorm-seeds/metadata/field-metadata/view.ts +++ b/server/src/database/typeorm-seeds/metadata/field-metadata/view.ts @@ -69,7 +69,7 @@ export const seedViewFieldMetadata = async ( isCustom: false, workspaceId: SeedWorkspaceId, isActive: true, - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, name: 'createdAt', label: 'Creation date', targetColumnMap: { @@ -87,7 +87,7 @@ export const seedViewFieldMetadata = async ( isCustom: false, workspaceId: SeedWorkspaceId, isActive: true, - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, name: 'updatedAt', label: 'Update date', targetColumnMap: { diff --git a/server/src/database/typeorm-seeds/metadata/field-metadata/webhook.ts b/server/src/database/typeorm-seeds/metadata/field-metadata/webhook.ts index e8cf14bb7..96705e95b 100644 --- a/server/src/database/typeorm-seeds/metadata/field-metadata/webhook.ts +++ b/server/src/database/typeorm-seeds/metadata/field-metadata/webhook.ts @@ -65,7 +65,7 @@ export const seedWebhookFieldMetadata = async ( isCustom: false, workspaceId: SeedWorkspaceId, isActive: true, - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, name: 'createdAt', label: 'Creation date', targetColumnMap: { @@ -83,7 +83,7 @@ export const seedWebhookFieldMetadata = async ( isCustom: false, workspaceId: SeedWorkspaceId, isActive: true, - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, name: 'updatedAt', label: 'Update date', targetColumnMap: { diff --git a/server/src/database/typeorm-seeds/metadata/field-metadata/workspace-member.ts b/server/src/database/typeorm-seeds/metadata/field-metadata/workspace-member.ts index 36e68510e..5aff162c2 100644 --- a/server/src/database/typeorm-seeds/metadata/field-metadata/workspace-member.ts +++ b/server/src/database/typeorm-seeds/metadata/field-metadata/workspace-member.ts @@ -76,7 +76,7 @@ export const seedWorkspaceMemberFieldMetadata = async ( isCustom: false, workspaceId: SeedWorkspaceId, isActive: true, - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, name: 'createdAt', label: 'Creation date', targetColumnMap: { @@ -94,7 +94,7 @@ export const seedWorkspaceMemberFieldMetadata = async ( isCustom: false, workspaceId: SeedWorkspaceId, isActive: true, - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, name: 'updatedAt', label: 'Update date', targetColumnMap: { diff --git a/server/src/metadata/field-metadata/field-metadata.entity.ts b/server/src/metadata/field-metadata/field-metadata.entity.ts index 462ce909f..1f17832e2 100644 --- a/server/src/metadata/field-metadata/field-metadata.entity.ts +++ b/server/src/metadata/field-metadata/field-metadata.entity.ts @@ -22,7 +22,7 @@ export enum FieldMetadataType { TEXT = 'TEXT', PHONE = 'PHONE', EMAIL = 'EMAIL', - DATE = 'DATE', + DATE_TIME = 'DATE_TIME', BOOLEAN = 'BOOLEAN', NUMBER = 'NUMBER', PROBABILITY = 'PROBABILITY', diff --git a/server/src/metadata/field-metadata/interfaces/field-metadata-default-value.interface.ts b/server/src/metadata/field-metadata/interfaces/field-metadata-default-value.interface.ts index efb0c123e..468a19b69 100644 --- a/server/src/metadata/field-metadata/interfaces/field-metadata-default-value.interface.ts +++ b/server/src/metadata/field-metadata/interfaces/field-metadata-default-value.interface.ts @@ -9,7 +9,7 @@ export interface FieldMetadataDefaultValueNumber { export interface FieldMetadataDefaultValueBoolean { value: boolean; } -export interface FieldMetadataDefaultValueDate { +export interface FieldMetadataDefaultValueDateTime { value: Date; } @@ -17,7 +17,7 @@ type FieldMetadataScalarDefaultValue = | FieldMetadataDefaultValueString | FieldMetadataDefaultValueNumber | FieldMetadataDefaultValueBoolean - | FieldMetadataDefaultValueDate; + | FieldMetadataDefaultValueDateTime; export type FieldMetadataDynamicDefaultValue = | { type: 'uuid' } @@ -50,7 +50,7 @@ type FieldMetadataDefaultValueMapping = { [FieldMetadataType.TEXT]: FieldMetadataDefaultValueString; [FieldMetadataType.PHONE]: FieldMetadataDefaultValueString; [FieldMetadataType.EMAIL]: FieldMetadataDefaultValueString; - [FieldMetadataType.DATE]: FieldMetadataDefaultValueDate; + [FieldMetadataType.DATE_TIME]: FieldMetadataDefaultValueDateTime; [FieldMetadataType.BOOLEAN]: FieldMetadataDefaultValueBoolean; [FieldMetadataType.NUMBER]: FieldMetadataDefaultValueNumber; [FieldMetadataType.PROBABILITY]: FieldMetadataDefaultValueNumber; diff --git a/server/src/metadata/field-metadata/utils/__tests__/validate-default-value-based-on-type.spec.ts b/server/src/metadata/field-metadata/utils/__tests__/validate-default-value-based-on-type.spec.ts index 0702c95e3..be14db2d3 100644 --- a/server/src/metadata/field-metadata/utils/__tests__/validate-default-value-based-on-type.spec.ts +++ b/server/src/metadata/field-metadata/utils/__tests__/validate-default-value-based-on-type.spec.ts @@ -15,9 +15,12 @@ describe('validateDefaultValueBasedOnType', () => { ).toBe(true); }); - it('should validate now dynamic default value for DATE type', () => { + it('should validate now dynamic default value for DATE_TIME type', () => { expect( - validateDefaultValueBasedOnType({ type: 'now' }, FieldMetadataType.DATE), + validateDefaultValueBasedOnType( + { type: 'now' }, + FieldMetadataType.DATE_TIME, + ), ).toBe(true); }); diff --git a/server/src/metadata/field-metadata/utils/convert-field-metadata-to-column-action.util.ts b/server/src/metadata/field-metadata/utils/convert-field-metadata-to-column-action.util.ts index 7768bf534..62f6a9ca9 100644 --- a/server/src/metadata/field-metadata/utils/convert-field-metadata-to-column-action.util.ts +++ b/server/src/metadata/field-metadata/utils/convert-field-metadata-to-column-action.util.ts @@ -72,9 +72,9 @@ export function convertFieldMetadataToColumnActions( }, ]; } - case FieldMetadataType.DATE: { + case FieldMetadataType.DATE_TIME: { const defaultValue = - fieldMetadata.defaultValue as FieldMetadataDefaultValue; + fieldMetadata.defaultValue as FieldMetadataDefaultValue; return [ { diff --git a/server/src/metadata/field-metadata/utils/generate-target-column-map.util.ts b/server/src/metadata/field-metadata/utils/generate-target-column-map.util.ts index 9e7a59718..8b3f99df2 100644 --- a/server/src/metadata/field-metadata/utils/generate-target-column-map.util.ts +++ b/server/src/metadata/field-metadata/utils/generate-target-column-map.util.ts @@ -25,7 +25,7 @@ export function generateTargetColumnMap( case FieldMetadataType.NUMBER: case FieldMetadataType.PROBABILITY: case FieldMetadataType.BOOLEAN: - case FieldMetadataType.DATE: + case FieldMetadataType.DATE_TIME: return { value: columnName, }; diff --git a/server/src/metadata/field-metadata/utils/validate-default-value-based-on-type.util.ts b/server/src/metadata/field-metadata/utils/validate-default-value-based-on-type.util.ts index 11ff44ce4..2d1f9d543 100644 --- a/server/src/metadata/field-metadata/utils/validate-default-value-based-on-type.util.ts +++ b/server/src/metadata/field-metadata/utils/validate-default-value-based-on-type.util.ts @@ -13,7 +13,7 @@ export const validateDefaultValueBasedOnType = ( if (type === FieldMetadataType.UUID && defaultValue.type === 'uuid') { return true; } - if (type === FieldMetadataType.DATE && defaultValue.type === 'now') { + if (type === FieldMetadataType.DATE_TIME && defaultValue.type === 'now') { return true; } @@ -47,7 +47,7 @@ export const validateDefaultValueBasedOnType = ( typeof defaultValue.value === 'boolean' ); - case FieldMetadataType.DATE: + case FieldMetadataType.DATE_TIME: return ( typeof defaultValue === 'object' && 'value' in defaultValue && diff --git a/server/src/metadata/object-metadata/object-metadata.service.ts b/server/src/metadata/object-metadata/object-metadata.service.ts index b6dcb0a16..6780fc6ec 100644 --- a/server/src/metadata/object-metadata/object-metadata.service.ts +++ b/server/src/metadata/object-metadata/object-metadata.service.ts @@ -88,7 +88,7 @@ export class ObjectMetadataService extends TypeOrmQueryService[] = [ { name: 'createdAt', label: 'Creation date', - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, targetColumnMap: { value: 'createdAt', }, @@ -68,7 +68,7 @@ export const basicFieldsMetadata: Partial[] = [ { name: 'updatedAt', label: 'Update date', - type: FieldMetadataType.DATE, + type: FieldMetadataType.DATE_TIME, targetColumnMap: { value: 'updatedAt', }, diff --git a/server/src/workspace/workspace-schema-builder/services/type-mapper.service.ts b/server/src/workspace/workspace-schema-builder/services/type-mapper.service.ts index effc9329c..480c62640 100644 --- a/server/src/workspace/workspace-schema-builder/services/type-mapper.service.ts +++ b/server/src/workspace/workspace-schema-builder/services/type-mapper.service.ts @@ -58,7 +58,7 @@ export class TypeMapperService { [FieldMetadataType.TEXT, GraphQLString], [FieldMetadataType.PHONE, GraphQLString], [FieldMetadataType.EMAIL, GraphQLString], - [FieldMetadataType.DATE, dateScalar], + [FieldMetadataType.DATE_TIME, dateScalar], [FieldMetadataType.BOOLEAN, GraphQLBoolean], [FieldMetadataType.NUMBER, numberScalar], [FieldMetadataType.PROBABILITY, GraphQLFloat], @@ -87,7 +87,7 @@ export class TypeMapperService { [FieldMetadataType.TEXT, StringFilterType], [FieldMetadataType.PHONE, StringFilterType], [FieldMetadataType.EMAIL, StringFilterType], - [FieldMetadataType.DATE, dateFilter], + [FieldMetadataType.DATE_TIME, dateFilter], [FieldMetadataType.BOOLEAN, BooleanFilterType], [FieldMetadataType.NUMBER, numberScalar], [FieldMetadataType.PROBABILITY, FloatFilterType], @@ -106,7 +106,7 @@ export class TypeMapperService { [FieldMetadataType.TEXT, OrderByDirectionType], [FieldMetadataType.PHONE, OrderByDirectionType], [FieldMetadataType.EMAIL, OrderByDirectionType], - [FieldMetadataType.DATE, OrderByDirectionType], + [FieldMetadataType.DATE_TIME, OrderByDirectionType], [FieldMetadataType.BOOLEAN, OrderByDirectionType], [FieldMetadataType.NUMBER, OrderByDirectionType], [FieldMetadataType.PROBABILITY, OrderByDirectionType], diff --git a/server/src/workspace/workspace-schema-builder/utils/__tests__/get-field-metadata-type.spec.ts b/server/src/workspace/workspace-schema-builder/utils/__tests__/get-field-metadata-type.spec.ts index d43601579..8c2a729a7 100644 --- a/server/src/workspace/workspace-schema-builder/utils/__tests__/get-field-metadata-type.spec.ts +++ b/server/src/workspace/workspace-schema-builder/utils/__tests__/get-field-metadata-type.spec.ts @@ -4,7 +4,7 @@ import { getFieldMetadataType } from 'src/workspace/workspace-schema-builder/uti describe('getFieldMetadataType', () => { it.each([ ['uuid', FieldMetadataType.UUID], - ['timestamp', FieldMetadataType.DATE], + ['timestamp', FieldMetadataType.DATE_TIME], ])( 'should return correct FieldMetadataType for type %s', (type, expectedMetadataType) => { diff --git a/server/src/workspace/workspace-schema-builder/utils/get-field-metadata-type.util.ts b/server/src/workspace/workspace-schema-builder/utils/get-field-metadata-type.util.ts index 0de04521f..a32fa3434 100644 --- a/server/src/workspace/workspace-schema-builder/utils/get-field-metadata-type.util.ts +++ b/server/src/workspace/workspace-schema-builder/utils/get-field-metadata-type.util.ts @@ -2,7 +2,7 @@ import { FieldMetadataType } from 'src/metadata/field-metadata/field-metadata.en const typeOrmTypeMapping = new Map([ ['uuid', FieldMetadataType.UUID], - ['timestamp', FieldMetadataType.DATE], + ['timestamp', FieldMetadataType.DATE_TIME], // Add more types here if we need to support more than id, and createdAt/updatedAt/deletedAt ]);