diff --git a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/__mocks__/mockPersonObjectMetadata.ts b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/__mocks__/mockPersonObjectMetadata.ts index 0ab4cdf36a..72fbebd9cb 100644 --- a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/__mocks__/mockPersonObjectMetadata.ts +++ b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/__mocks__/mockPersonObjectMetadata.ts @@ -162,8 +162,8 @@ export const mockPersonFlatObjectMetadata = ( viewIds: [], applicationId: null, isLabelSyncedWithName: false, - createdAt: new Date(), - updatedAt: new Date(), + createdAt: new Date().toISOString(), + updatedAt: new Date().toISOString(), shortcut: null, description: null, standardOverrides: null, diff --git a/packages/twenty-server/src/engine/core-modules/event-emitter/utils/__tests__/object-record-changed-values.spec.ts b/packages/twenty-server/src/engine/core-modules/event-emitter/utils/__tests__/object-record-changed-values.spec.ts index 285c051528..c23294eb51 100644 --- a/packages/twenty-server/src/engine/core-modules/event-emitter/utils/__tests__/object-record-changed-values.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/event-emitter/utils/__tests__/object-record-changed-values.spec.ts @@ -1,7 +1,7 @@ +import { objectRecordChangedValues } from 'src/engine/core-modules/event-emitter/utils/object-record-changed-values'; import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; -import { objectRecordChangedValues } from 'src/engine/core-modules/event-emitter/utils/object-record-changed-values'; const mockObjectMetadata = { id: '1', @@ -24,8 +24,8 @@ const mockObjectMetadata = { viewIds: [], applicationId: null, isLabelSyncedWithName: false, - createdAt: new Date(), - updatedAt: new Date(), + createdAt: new Date().toISOString(), + updatedAt: new Date().toISOString(), shortcut: null, description: null, standardOverrides: null, diff --git a/packages/twenty-server/src/engine/metadata-modules/ai/ai-agent/utils/from-create-agent-input-to-flat-agent.util.ts b/packages/twenty-server/src/engine/metadata-modules/ai/ai-agent/utils/from-create-agent-input-to-flat-agent.util.ts index 7a6fcadc50..e9e0465105 100644 --- a/packages/twenty-server/src/engine/metadata-modules/ai/ai-agent/utils/from-create-agent-input-to-flat-agent.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/ai/ai-agent/utils/from-create-agent-input-to-flat-agent.util.ts @@ -38,7 +38,7 @@ export const fromCreateAgentInputToFlatAgent = ({ ], ); - const createdAt = new Date(); + const createdAt = new Date().toISOString(); const agentId = v4(); const standardId = createAgentInput.standardId ?? null; const universalIdentifier = standardId ?? agentId; diff --git a/packages/twenty-server/src/engine/metadata-modules/ai/ai-agent/utils/from-update-agent-input-to-flat-agent-to-update.util.ts b/packages/twenty-server/src/engine/metadata-modules/ai/ai-agent/utils/from-update-agent-input-to-flat-agent-to-update.util.ts index 505eb17b84..e88954a0e0 100644 --- a/packages/twenty-server/src/engine/metadata-modules/ai/ai-agent/utils/from-update-agent-input-to-flat-agent-to-update.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/ai/ai-agent/utils/from-update-agent-input-to-flat-agent-to-update.util.ts @@ -38,7 +38,7 @@ const computeAgentFlatRoleTargetToUpdate = ({ } const existingRoleTarget = flatRoleTargetByAgentIdMaps[flatAgent.id]; - const updatedAt = new Date(); + const updatedAt = new Date().toISOString(); if (roleId === null) { if (isDefined(existingRoleTarget)) { diff --git a/packages/twenty-server/src/engine/metadata-modules/cron-trigger/services/workspace-flat-cron-trigger-map-cache.service.ts b/packages/twenty-server/src/engine/metadata-modules/cron-trigger/services/workspace-flat-cron-trigger-map-cache.service.ts index 6ff16f500a..605bba7213 100644 --- a/packages/twenty-server/src/engine/metadata-modules/cron-trigger/services/workspace-flat-cron-trigger-map-cache.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/cron-trigger/services/workspace-flat-cron-trigger-map-cache.service.ts @@ -46,6 +46,8 @@ export class WorkspaceFlatCronTriggerMapCacheService extends WorkspaceCacheProvi ]), universalIdentifier: cronTriggerEntity.universalIdentifier ?? cronTriggerEntity.id, + createdAt: cronTriggerEntity.createdAt.toISOString(), + updatedAt: cronTriggerEntity.updatedAt.toISOString(), } satisfies FlatCronTrigger; addFlatEntityToFlatEntityMapsThroughMutationOrThrow({ diff --git a/packages/twenty-server/src/engine/metadata-modules/cron-trigger/utils/from-create-cron-trigger-input-to-flat-cron-trigger.util.ts b/packages/twenty-server/src/engine/metadata-modules/cron-trigger/utils/from-create-cron-trigger-input-to-flat-cron-trigger.util.ts index 1e274aafa4..e4af7c2099 100644 --- a/packages/twenty-server/src/engine/metadata-modules/cron-trigger/utils/from-create-cron-trigger-input-to-flat-cron-trigger.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/cron-trigger/utils/from-create-cron-trigger-input-to-flat-cron-trigger.util.ts @@ -12,7 +12,7 @@ export const fromCreateCronTriggerInputToFlatCronTrigger = ({ workspaceId: string; workspaceCustomApplicationId: string; }): FlatCronTrigger => { - const now = new Date(); + const now = new Date().toISOString(); const id = v4(); return { diff --git a/packages/twenty-server/src/engine/metadata-modules/cron-trigger/utils/from-update-cron-trigger-input-to-flat-cron-trigger-to-update-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/cron-trigger/utils/from-update-cron-trigger-input-to-flat-cron-trigger-to-update-or-throw.util.ts index 0914e06295..5a9e025854 100644 --- a/packages/twenty-server/src/engine/metadata-modules/cron-trigger/utils/from-update-cron-trigger-input-to-flat-cron-trigger-to-update-or-throw.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/cron-trigger/utils/from-update-cron-trigger-input-to-flat-cron-trigger-to-update-or-throw.util.ts @@ -26,6 +26,6 @@ export const fromUpdateCronTriggerInputToFlatCronTriggerToUpdateOrThrow = ({ return { ...existingFlatCronTrigger, settings: updateCronTriggerInput.update.settings, - updatedAt: new Date(), + updatedAt: new Date().toISOString(), }; }; diff --git a/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/services/workspace-flat-database-event-trigger-map-cache.service.ts b/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/services/workspace-flat-database-event-trigger-map-cache.service.ts index aa5f7a214e..a5705a74f0 100644 --- a/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/services/workspace-flat-database-event-trigger-map-cache.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/services/workspace-flat-database-event-trigger-map-cache.service.ts @@ -48,6 +48,8 @@ export class WorkspaceFlatDatabaseEventTriggerMapCacheService extends WorkspaceC universalIdentifier: databaseEventTriggerEntity.universalIdentifier ?? databaseEventTriggerEntity.id, + createdAt: databaseEventTriggerEntity.createdAt.toISOString(), + updatedAt: databaseEventTriggerEntity.updatedAt.toISOString(), } satisfies FlatDatabaseEventTrigger; addFlatEntityToFlatEntityMapsThroughMutationOrThrow({ diff --git a/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/utils/from-create-database-event-trigger-input-to-flat-database-event-trigger.util.ts b/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/utils/from-create-database-event-trigger-input-to-flat-database-event-trigger.util.ts index 86d49ac46d..e9b84772fc 100644 --- a/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/utils/from-create-database-event-trigger-input-to-flat-database-event-trigger.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/utils/from-create-database-event-trigger-input-to-flat-database-event-trigger.util.ts @@ -12,7 +12,7 @@ export const fromCreateDatabaseEventTriggerInputToFlatDatabaseEventTrigger = ({ workspaceId: string; workspaceCustomApplicationId: string; }): FlatDatabaseEventTrigger => { - const now = new Date(); + const now = new Date().toISOString(); const id = uuidV4(); return { diff --git a/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/utils/from-update-database-event-trigger-input-to-flat-database-event-trigger-to-update-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/utils/from-update-database-event-trigger-input-to-flat-database-event-trigger-to-update-or-throw.util.ts index 40c2a0a52c..0b4ec729e9 100644 --- a/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/utils/from-update-database-event-trigger-input-to-flat-database-event-trigger-to-update-or-throw.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/utils/from-update-database-event-trigger-input-to-flat-database-event-trigger-to-update-or-throw.util.ts @@ -27,6 +27,6 @@ export const fromUpdateDatabaseEventTriggerInputToFlatDatabaseEventTriggerToUpda return { ...existingFlatDatabaseEventTrigger, settings: updateDatabaseEventTriggerInput.update.settings, - updatedAt: new Date(), + updatedAt: new Date().toISOString(), }; }; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-agent/utils/from-agent-entity-to-agent-dto.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-agent/utils/from-agent-entity-to-agent-dto.util.ts index 6785d655ee..64043bfb41 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-agent/utils/from-agent-entity-to-agent-dto.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-agent/utils/from-agent-entity-to-agent-dto.util.ts @@ -20,7 +20,7 @@ export const fromFlatAgentWithRoleIdToAgentDto = ({ workspaceId, roleId, }: FlatAgentWithRoleId): AgentDTO => ({ - createdAt, + createdAt: new Date(createdAt), description: description ?? undefined, evaluationInputs, id, @@ -32,7 +32,7 @@ export const fromFlatAgentWithRoleIdToAgentDto = ({ prompt, responseFormat, standardId, - updatedAt, + updatedAt: new Date(updatedAt), workspaceId, applicationId: applicationId ?? undefined, icon: icon ?? undefined, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-agent/utils/transform-agent-entity-to-flat-agent.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-agent/utils/transform-agent-entity-to-flat-agent.util.ts index 04b5b18734..d161f15706 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-agent/utils/transform-agent-entity-to-flat-agent.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-agent/utils/transform-agent-entity-to-flat-agent.util.ts @@ -5,9 +5,9 @@ export const transformAgentEntityToFlatAgent = ( agentEntity: AgentEntity, ): FlatAgent => { return { - createdAt: agentEntity.createdAt, - deletedAt: agentEntity.deletedAt, - updatedAt: agentEntity.updatedAt, + createdAt: agentEntity.createdAt.toISOString(), + deletedAt: agentEntity.deletedAt?.toISOString() ?? null, + updatedAt: agentEntity.updatedAt.toISOString(), id: agentEntity.id, standardId: agentEntity.standardId, name: agentEntity.name, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-agent/utils/transform-standard-agent-definition-to-flat-agent.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-agent/utils/transform-standard-agent-definition-to-flat-agent.util.ts index 5273d1749a..0238bf7631 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-agent/utils/transform-standard-agent-definition-to-flat-agent.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-agent/utils/transform-standard-agent-definition-to-flat-agent.util.ts @@ -21,13 +21,13 @@ export const transformStandardAgentDefinitionToFlatAgent = ({ outputStrategy: _outputStrategy, ...agentData } = standardAgentDefinition; - const createdAt = new Date(); + const createdAt = new Date().toISOString(); return { id: existingAgentEntity?.id ?? v4(), - createdAt: existingAgentEntity?.createdAt ?? createdAt, - updatedAt: existingAgentEntity?.updatedAt ?? createdAt, - deletedAt: existingAgentEntity?.deletedAt ?? null, + createdAt: existingAgentEntity?.createdAt?.toISOString() ?? createdAt, + updatedAt: existingAgentEntity?.updatedAt?.toISOString() ?? createdAt, + deletedAt: existingAgentEntity?.deletedAt?.toISOString() ?? null, ...agentData, workspaceId, universalIdentifier: standardAgentDefinition.standardId, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/create-empty-flat-entity-maps.constant.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/create-empty-flat-entity-maps.constant.ts index 9cff142b9d..4bbb141f79 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/create-empty-flat-entity-maps.constant.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/create-empty-flat-entity-maps.constant.ts @@ -1,9 +1,9 @@ import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; -import { type FlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; +import { type SyncableFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; export const createEmptyFlatEntityMaps = () => ({ byId: {}, idByUniversalIdentifier: {}, universalIdentifiersByApplicationId: {}, - }) as const satisfies FlatEntityMaps; + }) as const satisfies FlatEntityMaps; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/all-flat-entity-by-metadata-engine-name-test.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/all-flat-entity-by-metadata-engine-name-test.type.ts index 39ecb83512..b5ba32f195 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/all-flat-entity-by-metadata-engine-name-test.type.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/all-flat-entity-by-metadata-engine-name-test.type.ts @@ -1,8 +1,8 @@ -import { type Expect } from 'twenty-shared/testing'; import { type AllMetadataName } from 'twenty-shared/metadata'; +import { type Expect } from 'twenty-shared/testing'; import { type AllFlatEntityTypesByMetadataName } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-types-by-metadata-name'; -import { type FlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; +import { type SyncableFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; import { type WorkspaceMigrationActionV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-action-common-v2'; type ExpectedGenericFlatEntityInformation = { @@ -11,7 +11,7 @@ type ExpectedGenericFlatEntityInformation = { deleted: WorkspaceMigrationActionV2 | WorkspaceMigrationActionV2[]; updated: WorkspaceMigrationActionV2 | WorkspaceMigrationActionV2[]; }; - flatEntity: FlatEntity; + flatEntity: SyncableFlatEntity; }; type ExpectedGenericAllFlatEntityInformationByMetadataEngine = { diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type.ts index 5589194cf3..f15cc45cc1 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type.ts @@ -1,6 +1,6 @@ -import { type FlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; +import { type SyncableFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; -export type FlatEntityMaps = { +export type FlatEntityMaps = { byId: Partial>; idByUniversalIdentifier: Partial>; universalIdentifiersByApplicationId: Partial>; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/flat-entity.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/flat-entity.type.ts index 26d0a17523..1b6af2c843 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/flat-entity.type.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/flat-entity.type.ts @@ -1,22 +1,33 @@ import { type SyncableEntity } from 'src/engine/workspace-manager/workspace-sync/interfaces/syncable-entity.interface'; -import { type ApplicationEntity } from 'src/engine/core-modules/application/application.entity'; -import { type ExtractRecordTypeOrmRelationProperties } from 'src/engine/workspace-manager/workspace-migration-v2/types/extract-record-typeorm-relation-properties.type'; +import { type ExtractRecordTypeOrmNonNullableDateProperties } from 'src/engine/workspace-manager/workspace-migration-v2/types/extract-record-typeorm-non-nullable-date-properties.type'; +import { type ExtractRecordTypeOrmNullableDateProperties } from 'src/engine/workspace-manager/workspace-migration-v2/types/extract-record-typeorm-nullable-date-properties.type'; import { type NonNullableProperties } from 'src/types/non-nullable-properties.type'; -export type SyncableEntityRelationProperties = - ExtractRecordTypeOrmRelationProperties; - -export interface FlatEntity - extends NonNullableProperties< - Omit - > { +export type SyncableFlatEntity = NonNullableProperties< + Omit +> & { id: string; applicationId: string | null; -} +}; + +export type EntityNullableDateProperties = + ExtractRecordTypeOrmNullableDateProperties; + +export type EntityNonNullableDateProperties = + ExtractRecordTypeOrmNonNullableDateProperties; export type FlatEntityFrom< - TEntity extends SyncableEntity, + TEntity, TEntityRelationProperties extends keyof TEntity, -> = FlatEntity & - Omit; +> = Omit< + TEntity, + | TEntityRelationProperties + | EntityNonNullableDateProperties + | EntityNullableDateProperties + | 'application' +> & { + [P in EntityNonNullableDateProperties]: string; +} & { + [P in EntityNullableDateProperties]: string | null; +}; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/__tests__/delete-flat-entity-from-flat-entity-and-related-entity-maps-through-mutation-or-throw.spec.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/__tests__/delete-flat-entity-from-flat-entity-and-related-entity-maps-through-mutation-or-throw.spec.ts index 45c63bc734..c7ac089178 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/__tests__/delete-flat-entity-from-flat-entity-and-related-entity-maps-through-mutation-or-throw.spec.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/__tests__/delete-flat-entity-from-flat-entity-and-related-entity-maps-through-mutation-or-throw.spec.ts @@ -50,8 +50,8 @@ describe('deleteFlatEntityFromFlatEntityAndRelatedEntityMapsThroughMutationOrThr viewGroupIds: [], workspaceId, calendarFieldMetadataId: mockFieldMetadata.id, - createdAt: new Date('2024-01-01'), - updatedAt: new Date('2024-01-01'), + createdAt: new Date('2024-01-01').toISOString(), + updatedAt: new Date('2024-01-01').toISOString(), icon: 'icon', isCompact: false, name: 'View Name', diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util.ts index cee44fc384..a4dac00b90 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util.ts @@ -5,14 +5,16 @@ import { FlatEntityMapsExceptionCode, } from 'src/engine/metadata-modules/flat-entity/exceptions/flat-entity-maps.exception'; import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; -import { type FlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; +import { type SyncableFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; -type AddFlatEntityToFlatEntityMapsOrThrowArgs = { +type AddFlatEntityToFlatEntityMapsOrThrowArgs = { flatEntity: T; flatEntityMaps: FlatEntityMaps; }; -export const addFlatEntityToFlatEntityMapsOrThrow = ({ +export const addFlatEntityToFlatEntityMapsOrThrow = < + T extends SyncableFlatEntity, +>({ flatEntity, flatEntityMaps, }: AddFlatEntityToFlatEntityMapsOrThrowArgs): FlatEntityMaps => { diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util.ts index d002ce0b60..c43677bdc3 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util.ts @@ -6,17 +6,17 @@ import { FlatEntityMapsExceptionCode, } from 'src/engine/metadata-modules/flat-entity/exceptions/flat-entity-maps.exception'; import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; -import { type FlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; +import { type SyncableFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; export type DeleteFlatEntityFromFlatEntityMapsOrThrowArgs< - T extends FlatEntity, + T extends SyncableFlatEntity, > = { entityToDeleteId: string; flatEntityMaps: FlatEntityMaps; }; export const deleteFlatEntityFromFlatEntityMapsOrThrow = < - T extends FlatEntity, + T extends SyncableFlatEntity, >({ flatEntityMaps, entityToDeleteId, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util.ts index 69c246f1d5..18d950a35d 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util.ts @@ -6,16 +6,16 @@ import { FlatEntityMapsExceptionCode, } from 'src/engine/metadata-modules/flat-entity/exceptions/flat-entity-maps.exception'; import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; -import { type FlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; +import { type SyncableFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; export type FindFlatEntityByIdInFlatEntityMapsOrThrowArgs< - T extends FlatEntity, + T extends SyncableFlatEntity, > = { flatEntityMaps: FlatEntityMaps; flatEntityId: string; }; export const findFlatEntityByIdInFlatEntityMapsOrThrow = < - T extends FlatEntity, + T extends SyncableFlatEntity, >({ flatEntityMaps, flatEntityId, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util.ts index 0ba9191880..9f9b2d7d2a 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util.ts @@ -1,10 +1,12 @@ -import { type FlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; +import { type SyncableFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; import { findFlatEntityByIdInFlatEntityMapsOrThrow, type FindFlatEntityByIdInFlatEntityMapsOrThrowArgs, } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; -export const findFlatEntityByIdInFlatEntityMaps = ( +export const findFlatEntityByIdInFlatEntityMaps = < + T extends SyncableFlatEntity, +>( args: FindFlatEntityByIdInFlatEntityMapsOrThrowArgs, ): T | undefined => { try { diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util.ts index 142ad70c57..71f5631375 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util.ts @@ -1,17 +1,17 @@ import { isDefined } from 'twenty-shared/utils'; import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; -import { type FlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; +import { type SyncableFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; import { getSubFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/get-sub-flat-entity-maps-or-throw.util'; export type FindManyFlatEntityByIdInFlatEntityMapsOrThrowArgs< - T extends FlatEntity, + T extends SyncableFlatEntity, > = { flatEntityMaps: FlatEntityMaps; flatEntityIds: string[]; }; export const findManyFlatEntityByIdInFlatEntityMapsOrThrow = < - T extends FlatEntity, + T extends SyncableFlatEntity, >({ flatEntityMaps, flatEntityIds, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/get-flat-entities-by-application-id.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/get-flat-entities-by-application-id.util.ts index 20cfa172ca..6fe6c2b837 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/get-flat-entities-by-application-id.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/get-flat-entities-by-application-id.util.ts @@ -1,9 +1,9 @@ import { isDefined } from 'twenty-shared/utils'; import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; -import { type FlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; +import { type SyncableFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; -export const getFlatEntitiesByApplicationId = ( +export const getFlatEntitiesByApplicationId = ( maps: FlatEntityMaps, applicationId: string, ): T[] => { diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/get-flat-entities-by-universal-identifier.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/get-flat-entities-by-universal-identifier.util.ts index 20c009bff8..1add97c55b 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/get-flat-entities-by-universal-identifier.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/get-flat-entities-by-universal-identifier.util.ts @@ -1,9 +1,11 @@ import { isDefined } from 'twenty-shared/utils'; import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; -import { type FlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; +import { type SyncableFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; -export const getFlatEntityByUniversalIdentifier = ( +export const getFlatEntityByUniversalIdentifier = < + T extends SyncableFlatEntity, +>( maps: FlatEntityMaps, universalIdentifier: string, ): T | undefined => { diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/get-sub-flat-entity-maps-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/get-sub-flat-entity-maps-or-throw.util.ts index 61427588d6..2ff0f67053 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/get-sub-flat-entity-maps-or-throw.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/get-sub-flat-entity-maps-or-throw.util.ts @@ -1,10 +1,10 @@ import { createEmptyFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/constant/create-empty-flat-entity-maps.constant'; import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; -import { type FlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; +import { type SyncableFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; -export const getSubFlatEntityMapsOrThrow = ({ +export const getSubFlatEntityMapsOrThrow = ({ flatEntityIds, flatEntityMaps, }: { diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util.ts index 9ae9bd293c..6d5f241d8b 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util.ts @@ -1,15 +1,18 @@ import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; -import { type FlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; +import { type SyncableFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util'; -export type ReplaceFlatEntityInFlatEntityMapsOrThrowArgs = - { - flatEntity: T; - flatEntityMaps: FlatEntityMaps; - }; +export type ReplaceFlatEntityInFlatEntityMapsOrThrowArgs< + T extends SyncableFlatEntity, +> = { + flatEntity: T; + flatEntityMaps: FlatEntityMaps; +}; -export const replaceFlatEntityInFlatEntityMapsOrThrow = ({ +export const replaceFlatEntityInFlatEntityMapsOrThrow = < + T extends SyncableFlatEntity, +>({ flatEntity, flatEntityMaps, }: ReplaceFlatEntityInFlatEntityMapsOrThrowArgs): FlatEntityMaps => { diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/transform-flat-entity-for-comparison.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/transform-flat-entity-for-comparison.util.ts index 75d3f93385..368f506457 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/transform-flat-entity-for-comparison.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/transform-flat-entity-for-comparison.util.ts @@ -1,8 +1,8 @@ -import { type FlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; +import { type SyncableFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; import { orderObjectProperties } from 'src/engine/workspace-manager/workspace-sync-metadata/comparators/utils/order-object-properties.util'; export function transformFlatEntityForComparison< - TFlatEntity extends FlatEntity, + TFlatEntity extends SyncableFlatEntity, PToCompare extends keyof TFlatEntity, PJsonB extends PToCompare, >({ diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/__tests__/__snapshots__/morph-relation-from-create-field-input-to-flat-field-metadatas-to-create.spec.ts.snap b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/__tests__/__snapshots__/morph-relation-from-create-field-input-to-flat-field-metadatas-to-create.spec.ts.snap index 682cfafa5b..cade8b6223 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/__tests__/__snapshots__/morph-relation-from-create-field-input-to-flat-field-metadatas-to-create.spec.ts.snap +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/__tests__/__snapshots__/morph-relation-from-create-field-input-to-flat-field-metadatas-to-create.spec.ts.snap @@ -267,15 +267,15 @@ exports[`fromCreateFieldInputToFlatFieldMetadatasToCreate MORPH_RELATION test su "indexMetadatas": [ { "applicationId": Any, - "createdAt": Any, + "createdAt": Any, "flatIndexFieldMetadatas": [ { - "createdAt": Any, + "createdAt": Any, "fieldMetadataId": Any, "id": Any, "indexMetadataId": Any, "order": 0, - "updatedAt": Any, + "updatedAt": Any, }, ], "id": Any, @@ -286,20 +286,20 @@ exports[`fromCreateFieldInputToFlatFieldMetadatasToCreate MORPH_RELATION test su "name": "IDX_f687e4e4252800dddd8e5518362", "objectMetadataId": Any, "universalIdentifier": Any, - "updatedAt": Any, + "updatedAt": Any, "workspaceId": Any, }, { "applicationId": Any, - "createdAt": Any, + "createdAt": Any, "flatIndexFieldMetadatas": [ { - "createdAt": Any, + "createdAt": Any, "fieldMetadataId": Any, "id": Any, "indexMetadataId": Any, "order": 0, - "updatedAt": Any, + "updatedAt": Any, }, ], "id": Any, @@ -310,7 +310,7 @@ exports[`fromCreateFieldInputToFlatFieldMetadatasToCreate MORPH_RELATION test su "name": "IDX_cb15d901e889e25d0a9acecb595", "objectMetadataId": Any, "universalIdentifier": Any, - "updatedAt": Any, + "updatedAt": Any, "workspaceId": Any, }, ], diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/generate-index-for-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/generate-index-for-flat-field-metadata.util.ts index 80cb850144..6908473938 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/generate-index-for-flat-field-metadata.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/generate-index-for-flat-field-metadata.util.ts @@ -18,7 +18,7 @@ export const generateIndexForFlatFieldMetadata = ({ workspaceId, }: GenerateIndexForFlatFieldMetadataArgs): FlatIndexMetadata => { const indexId = v4(); - const createdAt = new Date(); + const createdAt = new Date().toISOString(); const flatIndex: FlatIndexMetadata = generateFlatIndexMetadataWithNameOrThrow( { diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/recompute-view-groups-on-enum-flat-field-metadata-is-nullable-update.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/recompute-view-groups-on-enum-flat-field-metadata-is-nullable-update.util.ts index a5ebb05182..48bdbe7028 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/recompute-view-groups-on-enum-flat-field-metadata-is-nullable-update.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/recompute-view-groups-on-enum-flat-field-metadata-is-nullable-update.util.ts @@ -65,7 +65,7 @@ export const recomputeViewGroupsOnEnumFlatFieldMetadataIsNullableUpdate = ({ ) { const highestViewGroupPosition = highestViewGroupPositionByViewId[viewId]; const viewGroupId = v4(); - const createdAt = new Date(); + const createdAt = new Date().toISOString(); sideEffectResult.flatViewGroupsToCreate.push({ id: viewGroupId, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/recompute-view-groups-on-flat-field-metadata-options-update.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/recompute-view-groups-on-flat-field-metadata-options-update.util.ts index 7db865d066..5f52d88681 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/recompute-view-groups-on-flat-field-metadata-options-update.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/recompute-view-groups-on-flat-field-metadata-options-update.util.ts @@ -89,7 +89,7 @@ export const recomputeViewGroupsOnFlatFieldMetadataOptionsUpdate = ({ const viewIds = Object.keys(viewGroupsByViewId.flatViewGroupRecordByViewId); - const createdAt = new Date(); + const createdAt = new Date().toISOString(); const flatViewGroupsToCreate = createdFieldMetadataOptions.flatMap( (option, createdOptionIndex) => viewIds.map((viewId) => { diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/__mocks__/get-flat-index-metadata.mock.ts b/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/__mocks__/get-flat-index-metadata.mock.ts index 48189fb440..e9279a344f 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/__mocks__/get-flat-index-metadata.mock.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/__mocks__/get-flat-index-metadata.mock.ts @@ -10,7 +10,7 @@ type FlatIndexMetadataOverrides = Required< export const getFlatIndexMetadataMock = ( overrides: FlatIndexMetadataOverrides, ): FlatIndexMetadata => { - const createdAt = faker.date.anytime(); + const createdAt = faker.date.anytime().toISOString(); return { flatIndexFieldMetadatas: [], diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata.type.ts index d1e67ba840..053d3cc831 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata.type.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata.type.ts @@ -10,13 +10,15 @@ export type IndexMetadataRelationProperties = MetadataEntitiesRelationTarget >; -// Can't use FlatEntityFrom here because IndexFieldMetadataEntity is not a SyncableEntity -export type FlatIndexFieldMetadata = Omit< - IndexFieldMetadataEntity, +export type IndexFieldMetadataEntityRelationProperties = ExtractRecordTypeOrmRelationProperties< IndexFieldMetadataEntity, MetadataEntitiesRelationTarget - > + >; + +export type FlatIndexFieldMetadata = FlatEntityFrom< + IndexFieldMetadataEntity, + IndexFieldMetadataEntityRelationProperties >; export type FlatIndexMetadata = FlatEntityFrom< diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/utils/from-index-metadata-entity-to-flat-index-metadata.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/utils/from-index-metadata-entity-to-flat-index-metadata.util.ts index d04abe3abb..c94f598e87 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/utils/from-index-metadata-entity-to-flat-index-metadata.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/utils/from-index-metadata-entity-to-flat-index-metadata.util.ts @@ -14,15 +14,20 @@ export const fromIndexMetadataEntityToFlatIndexMetadata = ( return { ...indexMetadataEntityWithoutRelations, + createdAt: indexMetadataEntity.createdAt.toISOString(), + updatedAt: indexMetadataEntity.updatedAt.toISOString(), universalIdentifier: indexMetadataEntityWithoutRelations.universalIdentifier ?? indexMetadataEntityWithoutRelations.id, flatIndexFieldMetadatas: indexMetadataEntity.indexFieldMetadatas.map( - (indexFieldMetadata) => - removePropertiesFromRecord(indexFieldMetadata, [ + (indexFieldMetadata) => ({ + ...removePropertiesFromRecord(indexFieldMetadata, [ 'indexMetadata', 'fieldMetadata', ]), + createdAt: indexFieldMetadata.createdAt.toISOString(), + updatedAt: indexFieldMetadata.updatedAt.toISOString(), + }), ), }; }; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/__mocks__/get-flat-object-metadata.mock.ts b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/__mocks__/get-flat-object-metadata.mock.ts index d2315bdf77..5dad29c51c 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/__mocks__/get-flat-object-metadata.mock.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/__mocks__/get-flat-object-metadata.mock.ts @@ -9,7 +9,7 @@ type FlatObjectMetadataOverrides = Required< export const getFlatObjectMetadataMock = ( overrides: FlatObjectMetadataOverrides, ): FlatObjectMetadata => { - const createdAt = '2024-01-01T00:00:00.000Z' as unknown as Date; + const createdAt = '2024-01-01T00:00:00.000Z'; return { viewIds: [], diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/from-create-object-input-to-flat-object-metadata-and-flat-field-metadatas-to-create.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/from-create-object-input-to-flat-object-metadata-and-flat-field-metadatas-to-create.util.ts index 4d5c528fee..ef40f5e12c 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/from-create-object-input-to-flat-object-metadata-and-flat-field-metadatas-to-create.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/from-create-object-input-to-flat-object-metadata-and-flat-field-metadatas-to-create.util.ts @@ -54,7 +54,7 @@ export const fromCreateObjectInputToFlatObjectMetadataAndFlatFieldMetadatasToCre }, workspaceId, }); - const createdAt = new Date(); + const createdAt = new Date().toISOString(); const flatObjectMetadataToCreate: FlatObjectMetadata = { fieldMetadataIds: [], viewIds: [], diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/from-object-metadata-entity-to-flat-object-metadata.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/from-object-metadata-entity-to-flat-object-metadata.util.ts index f35ed7a17b..397ffe297d 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/from-object-metadata-entity-to-flat-object-metadata.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/from-object-metadata-entity-to-flat-object-metadata.util.ts @@ -16,6 +16,8 @@ export const fromObjectMetadataEntityToFlatObjectMetadata = ( return { ...objectMetadataEntityWithoutRelations, + createdAt: objectMetadataEntity.createdAt.toISOString(), + updatedAt: objectMetadataEntity.updatedAt.toISOString(), viewIds: objectMetadataEntity.views.map((viewEntity) => viewEntity.id), indexMetadataIds: objectMetadataEntity.indexMetadatas.map( (indexEntity) => indexEntity.id, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/is-failed-flat-object-metadata-validation.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/is-failed-flat-object-metadata-validation.util.ts index 34caeb4af6..39708f3962 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/is-failed-flat-object-metadata-validation.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/is-failed-flat-object-metadata-validation.util.ts @@ -1,4 +1,4 @@ -import { type FlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; +import { type SyncableFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; import { WORKSPACE_MIGRATION_OBJECT_ACTION_TYPES, @@ -7,7 +7,7 @@ import { import { type FailedFlatEntityValidation } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/types/failed-flat-entity-validation.type'; export const isFailedFlatObjectMetadataValidation = ( - failedValidation: FailedFlatEntityValidation, + failedValidation: FailedFlatEntityValidation, ): failedValidation is FailedFlatEntityValidation => { return WORKSPACE_MIGRATION_OBJECT_ACTION_TYPES.includes( failedValidation.type as WorkspaceMigrationObjectActionTypeV2, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/recompute-view-field-identifier-after-flat-object-identifier-update.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/recompute-view-field-identifier-after-flat-object-identifier-update.util.ts index f3eb3d2b14..a8c3f44229 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/recompute-view-field-identifier-after-flat-object-identifier-update.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/recompute-view-field-identifier-after-flat-object-identifier-update.util.ts @@ -52,7 +52,7 @@ export const recomputeViewFieldIdentifierAfterFlatObjectIdentifierUpdate = ({ if (!isDefined(labelMetadataIdentifierViewField)) { const viewFieldId = v4(); - const createdAt = new Date(); + const createdAt = new Date().toISOString(); const flatViewFieldToCreate: FlatViewField = { fieldMetadataId: updatedLabelIdentifierFieldMetadataId, position: lowestViewFieldPosition - 1, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-page-layout-tab/utils/transform-page-layout-tab-entity-to-flat-page-layout-tab.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-page-layout-tab/utils/transform-page-layout-tab-entity-to-flat-page-layout-tab.util.ts index 889b8a57c1..001723e58e 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-page-layout-tab/utils/transform-page-layout-tab-entity-to-flat-page-layout-tab.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-page-layout-tab/utils/transform-page-layout-tab-entity-to-flat-page-layout-tab.util.ts @@ -5,9 +5,9 @@ export const transformPageLayoutTabEntityToFlatPageLayoutTab = ( pageLayoutTabEntity: PageLayoutTabEntity, ): FlatPageLayoutTab => { return { - createdAt: pageLayoutTabEntity.createdAt, - deletedAt: pageLayoutTabEntity.deletedAt, - updatedAt: pageLayoutTabEntity.updatedAt, + createdAt: pageLayoutTabEntity.createdAt.toISOString(), + deletedAt: pageLayoutTabEntity.deletedAt?.toISOString() ?? null, + updatedAt: pageLayoutTabEntity.updatedAt.toISOString(), id: pageLayoutTabEntity.id, title: pageLayoutTabEntity.title, position: pageLayoutTabEntity.position, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-page-layout-widget/utils/from-create-page-layout-widget-input-to-flat-page-layout-widget-to-create.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-page-layout-widget/utils/from-create-page-layout-widget-input-to-flat-page-layout-widget-to-create.util.ts index 22c3175061..10ffbce93b 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-page-layout-widget/utils/from-create-page-layout-widget-input-to-flat-page-layout-widget-to-create.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-page-layout-widget/utils/from-create-page-layout-widget-input-to-flat-page-layout-widget-to-create.util.ts @@ -23,7 +23,7 @@ export const fromCreatePageLayoutWidgetInputToFlatPageLayoutWidgetToCreate = ({ ['pageLayoutTabId'], ); - const createdAt = new Date(); + const createdAt = new Date().toISOString(); const pageLayoutWidgetId = v4(); return { diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-page-layout-widget/utils/from-delete-page-layout-widget-input-to-flat-page-layout-widget-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-page-layout-widget/utils/from-delete-page-layout-widget-input-to-flat-page-layout-widget-or-throw.util.ts index 73af83ef34..6f44c68522 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-page-layout-widget/utils/from-delete-page-layout-widget-input-to-flat-page-layout-widget-or-throw.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-page-layout-widget/utils/from-delete-page-layout-widget-input-to-flat-page-layout-widget-or-throw.util.ts @@ -36,6 +36,6 @@ export const fromDeletePageLayoutWidgetInputToFlatPageLayoutWidgetOrThrow = ({ return { ...existingFlatPageLayoutWidgetToDelete, - deletedAt: new Date(), + deletedAt: new Date().toISOString(), }; }; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-page-layout-widget/utils/from-page-layout-widget-entity-to-flat-page-layout-widget.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-page-layout-widget/utils/from-page-layout-widget-entity-to-flat-page-layout-widget.util.ts index 00bfa9dbaa..c580df772d 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-page-layout-widget/utils/from-page-layout-widget-entity-to-flat-page-layout-widget.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-page-layout-widget/utils/from-page-layout-widget-entity-to-flat-page-layout-widget.util.ts @@ -14,6 +14,9 @@ export const fromPageLayoutWidgetEntityToFlatPageLayoutWidget = ( return { ...pageLayoutWidgetEntityWithoutRelations, + createdAt: pageLayoutWidgetEntity.createdAt.toISOString(), + updatedAt: pageLayoutWidgetEntity.updatedAt.toISOString(), + deletedAt: pageLayoutWidgetEntity.deletedAt?.toISOString() ?? null, universalIdentifier: pageLayoutWidgetEntityWithoutRelations.universalIdentifier ?? pageLayoutWidgetEntityWithoutRelations.id, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-page-layout/utils/transform-page-layout-entity-to-flat-page-layout.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-page-layout/utils/transform-page-layout-entity-to-flat-page-layout.util.ts index 820b793863..673b5c6b9e 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-page-layout/utils/transform-page-layout-entity-to-flat-page-layout.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-page-layout/utils/transform-page-layout-entity-to-flat-page-layout.util.ts @@ -5,9 +5,9 @@ export const transformPageLayoutEntityToFlatPageLayout = ( pageLayoutEntity: PageLayoutEntity, ): FlatPageLayout => { return { - createdAt: pageLayoutEntity.createdAt, - deletedAt: pageLayoutEntity.deletedAt, - updatedAt: pageLayoutEntity.updatedAt, + createdAt: pageLayoutEntity.createdAt.toISOString(), + deletedAt: pageLayoutEntity.deletedAt?.toISOString() ?? null, + updatedAt: pageLayoutEntity.updatedAt.toISOString(), id: pageLayoutEntity.id, name: pageLayoutEntity.name, type: pageLayoutEntity.type, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-role-target/utils/from-role-target-entity-to-flat-role-target.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-role-target/utils/from-role-target-entity-to-flat-role-target.util.ts index 6c45e87e05..dd41be5701 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-role-target/utils/from-role-target-entity-to-flat-role-target.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-role-target/utils/from-role-target-entity-to-flat-role-target.util.ts @@ -14,7 +14,7 @@ export const fromRoleTargetsEntityToFlatRoleTarget = ( targetApplicationId: roleTarget.targetApplicationId, applicationId: roleTarget.applicationId, universalIdentifier: roleTarget.universalIdentifier ?? roleTarget.id, - createdAt: roleTarget.createdAt, - updatedAt: roleTarget.updatedAt, + createdAt: roleTarget.createdAt.toISOString(), + updatedAt: roleTarget.updatedAt.toISOString(), }; }; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-role/utils/from-create-role-input-to-flat-role-to-create.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-role/utils/from-create-role-input-to-flat-role-to-create.util.ts index 40a83f9c90..71700e3a09 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-role/utils/from-create-role-input-to-flat-role-to-create.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-role/utils/from-create-role-input-to-flat-role-to-create.util.ts @@ -13,7 +13,7 @@ export const fromCreateRoleInputToFlatRoleToCreate = ({ workspaceId: string; applicationId: string; }): FlatRole => { - const now = new Date(); + const now = new Date().toISOString(); const { label, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-role/utils/from-role-entity-to-flat-role.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-role/utils/from-role-entity-to-flat-role.util.ts index a50397926f..574e525c98 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-role/utils/from-role-entity-to-flat-role.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-role/utils/from-role-entity-to-flat-role.util.ts @@ -20,8 +20,8 @@ export const fromRoleEntityToFlatRole = (role: RoleEntity): FlatRole => { canBeAssignedToApiKeys: role.canBeAssignedToApiKeys, canBeAssignedToApplications: role.canBeAssignedToApplications, workspaceId: role.workspaceId, - createdAt: role.createdAt, - updatedAt: role.updatedAt, + createdAt: role.createdAt.toISOString(), + updatedAt: role.updatedAt.toISOString(), universalIdentifier: role.universalIdentifier ?? role.standardId ?? role.id, applicationId: role.applicationId ?? null, roleTargetIds: role.roleTargets.map((rt) => rt.id), diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-role/utils/from-standard-role-definition-to-flat-role.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-role/utils/from-standard-role-definition-to-flat-role.util.ts index b754e70e4c..e362a7c355 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-role/utils/from-standard-role-definition-to-flat-role.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-role/utils/from-standard-role-definition-to-flat-role.util.ts @@ -7,7 +7,7 @@ export const fromStandardRoleDefinitionToFlatRole = ( standardRoleDefinition: StandardRoleDefinition, workspaceId: string, ): FlatRole => { - const createdAt = new Date(); + const createdAt = new Date().toISOString(); return { ...standardRoleDefinition, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view-field/utils/from-create-view-field-input-to-flat-view-field-to-create.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view-field/utils/from-create-view-field-input-to-flat-view-field-to-create.util.ts index f6d2883a14..3e24522759 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view-field/utils/from-create-view-field-input-to-flat-view-field-to-create.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-view-field/utils/from-create-view-field-input-to-flat-view-field-to-create.util.ts @@ -22,7 +22,7 @@ export const fromCreateViewFieldInputToFlatViewFieldToCreate = ({ ['aggregateOperation', 'fieldMetadataId', 'id', 'viewId'], ); - const createdAt = new Date(); + const createdAt = new Date().toISOString(); const viewFieldId = createViewFieldInput.id ?? v4(); return { diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view-field/utils/from-delete-view-field-input-to-flat-view-field-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view-field/utils/from-delete-view-field-input-to-flat-view-field-or-throw.util.ts index bc6f39bf6a..07ab8ed43b 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view-field/utils/from-delete-view-field-input-to-flat-view-field-or-throw.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-view-field/utils/from-delete-view-field-input-to-flat-view-field-or-throw.util.ts @@ -35,6 +35,6 @@ export const fromDeleteViewFieldInputToFlatViewFieldOrThrow = ({ return { ...existingFlatViewFieldToDelete, - deletedAt: new Date(), + deletedAt: new Date().toISOString(), }; }; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view-field/utils/from-view-field-entity-to-flat-view-field.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view-field/utils/from-view-field-entity-to-flat-view-field.util.ts index 7629dc2113..355f0c1850 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view-field/utils/from-view-field-entity-to-flat-view-field.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-view-field/utils/from-view-field-entity-to-flat-view-field.util.ts @@ -14,6 +14,9 @@ export const fromViewFieldEntityToFlatViewField = ( return { ...viewFieldEntityWithoutRelations, + createdAt: viewFieldEntity.createdAt.toISOString(), + updatedAt: viewFieldEntity.updatedAt.toISOString(), + deletedAt: viewFieldEntity.deletedAt?.toISOString() ?? null, universalIdentifier: viewFieldEntityWithoutRelations.universalIdentifier ?? viewFieldEntityWithoutRelations.id, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view-filter/utils/from-create-view-filter-input-to-flat-view-filter-to-create.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view-filter/utils/from-create-view-filter-input-to-flat-view-filter-to-create.util.ts index 4e0966a59b..eb9fc1b82d 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view-filter/utils/from-create-view-filter-input-to-flat-view-filter-to-create.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-view-filter/utils/from-create-view-filter-input-to-flat-view-filter-to-create.util.ts @@ -27,7 +27,7 @@ export const fromCreateViewFilterInputToFlatViewFilterToCreate = ({ ], ); - const createdAt = new Date(); + const createdAt = new Date().toISOString(); const viewFilterId = createViewFilterInput.id ?? v4(); return { diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view-filter/utils/from-delete-view-filter-input-to-flat-view-filter-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view-filter/utils/from-delete-view-filter-input-to-flat-view-filter-or-throw.util.ts index 17a7041173..4c33885967 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view-filter/utils/from-delete-view-filter-input-to-flat-view-filter-or-throw.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-view-filter/utils/from-delete-view-filter-input-to-flat-view-filter-or-throw.util.ts @@ -35,6 +35,6 @@ export const fromDeleteViewFilterInputToFlatViewFilterOrThrow = ({ return { ...existingFlatViewFilterToDelete, - deletedAt: new Date(), + deletedAt: new Date().toISOString(), }; }; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view-filter/utils/from-view-filter-entity-to-flat-view-filter.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view-filter/utils/from-view-filter-entity-to-flat-view-filter.util.ts index 95377c53d9..07d7a5bfec 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view-filter/utils/from-view-filter-entity-to-flat-view-filter.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-view-filter/utils/from-view-filter-entity-to-flat-view-filter.util.ts @@ -14,6 +14,9 @@ export const fromViewFilterEntityToFlatViewFilter = ( return { ...viewFilterEntityWithoutRelations, + createdAt: viewFilterEntity.createdAt.toISOString(), + updatedAt: viewFilterEntity.updatedAt.toISOString(), + deletedAt: viewFilterEntity.deletedAt?.toISOString() ?? null, universalIdentifier: viewFilterEntityWithoutRelations.universalIdentifier ?? viewFilterEntityWithoutRelations.id, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view-group/utils/compute-flat-view-groups-on-view-create.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view-group/utils/compute-flat-view-groups-on-view-create.util.ts index 95871b30ed..b28955cd27 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view-group/utils/compute-flat-view-groups-on-view-create.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-view-group/utils/compute-flat-view-groups-on-view-create.util.ts @@ -28,7 +28,7 @@ export const computeFlatViewGroupsOnViewCreate = ({ ); } - const createdAt = new Date(); + const createdAt = new Date().toISOString(); const flatViewGroupsFromOptions: FlatViewGroup[] = ( mainGroupByFieldMetadata.options ?? [] diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view-group/utils/from-create-view-group-input-to-flat-view-group-to-create.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view-group/utils/from-create-view-group-input-to-flat-view-group-to-create.util.ts index a7bad09dd3..3369037b32 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view-group/utils/from-create-view-group-input-to-flat-view-group-to-create.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-view-group/utils/from-create-view-group-input-to-flat-view-group-to-create.util.ts @@ -21,7 +21,7 @@ export const fromCreateViewGroupInputToFlatViewGroupToCreate = ({ ['fieldValue', 'id', 'viewId'], ); - const createdAt = new Date(); + const createdAt = new Date().toISOString(); const viewGroupId = createViewGroupInput.id ?? v4(); return { diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view-group/utils/from-delete-view-group-input-to-flat-view-group-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view-group/utils/from-delete-view-group-input-to-flat-view-group-or-throw.util.ts index 1416c2e5f3..f8da0ab648 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view-group/utils/from-delete-view-group-input-to-flat-view-group-or-throw.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-view-group/utils/from-delete-view-group-input-to-flat-view-group-or-throw.util.ts @@ -35,6 +35,6 @@ export const fromDeleteViewGroupInputToFlatViewGroupOrThrow = ({ return { ...existingFlatViewGroupToDelete, - deletedAt: new Date(), + deletedAt: new Date().toISOString(), }; }; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view-group/utils/from-view-group-entity-to-flat-view-group.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view-group/utils/from-view-group-entity-to-flat-view-group.util.ts index e8cc3b8322..67d0d3679f 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view-group/utils/from-view-group-entity-to-flat-view-group.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-view-group/utils/from-view-group-entity-to-flat-view-group.util.ts @@ -14,6 +14,9 @@ export const fromViewGroupEntityToFlatViewGroup = ( return { ...viewGroupEntityWithoutRelations, + createdAt: viewGroupEntity.createdAt.toISOString(), + updatedAt: viewGroupEntity.updatedAt.toISOString(), + deletedAt: viewGroupEntity.deletedAt?.toISOString() ?? null, universalIdentifier: viewGroupEntityWithoutRelations.universalIdentifier ?? viewGroupEntityWithoutRelations.id, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view/utils/from-create-view-input-to-flat-view-to-create.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view/utils/from-create-view-input-to-flat-view-to-create.util.ts index b44cf130bd..f78b8c9e5d 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view/utils/from-create-view-input-to-flat-view-to-create.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-view/utils/from-create-view-input-to-flat-view-to-create.util.ts @@ -35,7 +35,7 @@ export const fromCreateViewInputToFlatViewToCreate = ({ ['id', 'name', 'objectMetadataId'], ); - const createdAt = new Date(); + const createdAt = new Date().toISOString(); const viewId = createViewInput.id ?? v4(); const flatViewToCreate = { diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view/utils/from-delete-view-input-to-flat-view-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view/utils/from-delete-view-input-to-flat-view-or-throw.util.ts index 61f81ed25e..d47bbf837a 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view/utils/from-delete-view-input-to-flat-view-or-throw.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-view/utils/from-delete-view-input-to-flat-view-or-throw.util.ts @@ -35,6 +35,6 @@ export const fromDeleteViewInputToFlatViewOrThrow = ({ return { ...existingFlatViewToDelete, - deletedAt: new Date(), + deletedAt: new Date().toISOString(), }; }; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view/utils/from-view-entity-to-flat-view.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view/utils/from-view-entity-to-flat-view.util.ts index 4966e2101a..3575a28f5b 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view/utils/from-view-entity-to-flat-view.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-view/utils/from-view-entity-to-flat-view.util.ts @@ -12,6 +12,9 @@ export const fromViewEntityToFlatView = (viewEntity: ViewEntity): FlatView => { return { ...viewEntityWithoutRelations, + createdAt: viewEntity.createdAt.toISOString(), + updatedAt: viewEntity.updatedAt.toISOString(), + deletedAt: viewEntity.deletedAt?.toISOString() ?? null, universalIdentifier: viewEntityWithoutRelations.universalIdentifier ?? viewEntityWithoutRelations.id, diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/build-default-index-for-custom-object.util.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/build-default-index-for-custom-object.util.ts index ec617f404c..adf4e251a2 100644 --- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/build-default-index-for-custom-object.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/build-default-index-for-custom-object.util.ts @@ -23,16 +23,16 @@ export const buildDefaultIndexesForCustomObject = ({ const tsVectorFlatIndex = generateFlatIndexMetadataWithNameOrThrow({ objectFlatFieldMetadatas, flatIndex: { - createdAt, + createdAt: createdAt.toISOString(), flatIndexFieldMetadatas: [ { - createdAt, + createdAt: createdAt.toISOString(), fieldMetadataId: defaultFlatFieldForCustomObjectMaps.fields.searchVectorField.id, id: v4(), indexMetadataId: tsFlatVectorIndexId, order: 0, - updatedAt: createdAt, + updatedAt: createdAt.toISOString(), }, ], id: tsFlatVectorIndexId, @@ -42,7 +42,7 @@ export const buildDefaultIndexesForCustomObject = ({ isUnique: false, objectMetadataId: flatObjectMetadata.id, universalIdentifier: tsFlatVectorIndexId, - updatedAt: createdAt, + updatedAt: createdAt.toISOString(), workspaceId, applicationId: flatObjectMetadata.applicationId ?? null, }, diff --git a/packages/twenty-server/src/engine/metadata-modules/role-target/utils/from-create-role-target-input-to-flat-role-target-to-create.util.ts b/packages/twenty-server/src/engine/metadata-modules/role-target/utils/from-create-role-target-input-to-flat-role-target-to-create.util.ts index 1254e0890e..74862bb2a2 100644 --- a/packages/twenty-server/src/engine/metadata-modules/role-target/utils/from-create-role-target-input-to-flat-role-target-to-create.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/role-target/utils/from-create-role-target-input-to-flat-role-target-to-create.util.ts @@ -1,5 +1,5 @@ -import { v4 } from 'uuid'; import { isDefined } from 'twenty-shared/utils'; +import { v4 } from 'uuid'; import { type AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; import { type FlatRoleTarget } from 'src/engine/metadata-modules/flat-role-target/types/flat-role-target.type'; @@ -28,8 +28,8 @@ export const fromCreateRoleTargetInputToFlatRoleTargetToCreate = ({ agentId: null, apiKeyId: null, targetApplicationId: null, - createdAt: now, - updatedAt: now, + createdAt: now.toISOString(), + updatedAt: now.toISOString(), universalIdentifier: universalIdentifier ?? v4(), workspaceId, applicationId: createRoleTargetInput.applicationId, diff --git a/packages/twenty-server/src/engine/metadata-modules/role/role.resolver.ts b/packages/twenty-server/src/engine/metadata-modules/role/role.resolver.ts index 4ce15c46ed..cf7d185b57 100644 --- a/packages/twenty-server/src/engine/metadata-modules/role/role.resolver.ts +++ b/packages/twenty-server/src/engine/metadata-modules/role/role.resolver.ts @@ -288,6 +288,9 @@ export class RoleResolver { return agents.map((agentEntity) => fromFlatAgentWithRoleIdToAgentDto({ ...agentEntity, + createdAt: agentEntity.createdAt.toISOString(), + updatedAt: agentEntity.updatedAt.toISOString(), + deletedAt: agentEntity.deletedAt?.toISOString() ?? null, universalIdentifier: agentEntity.universalIdentifier ?? agentEntity.id, roleId: role.id, }), diff --git a/packages/twenty-server/src/engine/metadata-modules/route-trigger/services/workspace-flat-route-trigger-map-cache.service.ts b/packages/twenty-server/src/engine/metadata-modules/route-trigger/services/workspace-flat-route-trigger-map-cache.service.ts index 32e8f43c3e..7dbcc378a3 100644 --- a/packages/twenty-server/src/engine/metadata-modules/route-trigger/services/workspace-flat-route-trigger-map-cache.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/route-trigger/services/workspace-flat-route-trigger-map-cache.service.ts @@ -44,6 +44,8 @@ export class WorkspaceFlatRouteTriggerMapCacheService extends WorkspaceCacheProv ...removePropertiesFromRecord(routeTriggerEntity, [ ...ROUTE_TRIGGER_ENTITY_RELATION_PROPERTIES, ]), + createdAt: routeTriggerEntity.createdAt.toISOString(), + updatedAt: routeTriggerEntity.updatedAt.toISOString(), universalIdentifier: routeTriggerEntity.universalIdentifier ?? routeTriggerEntity.id, } satisfies FlatRouteTrigger; diff --git a/packages/twenty-server/src/engine/metadata-modules/route-trigger/utils/from-create-route-trigger-input-to-flat-route-trigger.util.ts b/packages/twenty-server/src/engine/metadata-modules/route-trigger/utils/from-create-route-trigger-input-to-flat-route-trigger.util.ts index 510f2d3f12..651c82a463 100644 --- a/packages/twenty-server/src/engine/metadata-modules/route-trigger/utils/from-create-route-trigger-input-to-flat-route-trigger.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/route-trigger/utils/from-create-route-trigger-input-to-flat-route-trigger.util.ts @@ -23,8 +23,8 @@ export const fromCreateRouteTriggerInputToFlatRouteTrigger = ({ httpMethod: createRouteTriggerInput.httpMethod, serverlessFunctionId: createRouteTriggerInput.serverlessFunctionId, workspaceId, - createdAt: now, - updatedAt: now, + createdAt: now.toISOString(), + updatedAt: now.toISOString(), applicationId: workspaceCustomApplicationId, }; }; diff --git a/packages/twenty-server/src/engine/metadata-modules/route-trigger/utils/from-update-route-trigger-input-to-flat-route-trigger-to-update-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/route-trigger/utils/from-update-route-trigger-input-to-flat-route-trigger-to-update-or-throw.util.ts index 51292f9595..f01b72c55d 100644 --- a/packages/twenty-server/src/engine/metadata-modules/route-trigger/utils/from-update-route-trigger-input-to-flat-route-trigger-to-update-or-throw.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/route-trigger/utils/from-update-route-trigger-input-to-flat-route-trigger-to-update-or-throw.util.ts @@ -25,9 +25,9 @@ export const fromUpdateRouteTriggerInputToFlatRouteTriggerToUpdateOrThrow = ({ return { ...existingFlatRouteTrigger, + updatedAt: new Date().toISOString(), path: updateRouteTriggerInput.update.path, isAuthRequired: updateRouteTriggerInput.update.isAuthRequired, httpMethod: updateRouteTriggerInput.update.httpMethod, - updatedAt: new Date(), }; }; diff --git a/packages/twenty-server/src/engine/metadata-modules/serverless-function/services/serverless-function-v2.service.ts b/packages/twenty-server/src/engine/metadata-modules/serverless-function/services/serverless-function-v2.service.ts index 79ac472b5f..c675efd562 100644 --- a/packages/twenty-server/src/engine/metadata-modules/serverless-function/services/serverless-function-v2.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/serverless-function/services/serverless-function-v2.service.ts @@ -179,7 +179,7 @@ export class ServerlessFunctionV2Service { const optimisticallyUpdatedFlatServerlessFunctionWithDeletedAt = { ...existingFlatServerlessFunction, - deletedAt: new Date(), + deletedAt: new Date().toISOString(), }; const validateAndBuildResult = diff --git a/packages/twenty-server/src/engine/metadata-modules/serverless-function/utils/from-create-serverless-function-input-to-flat-serverless-function.util.ts b/packages/twenty-server/src/engine/metadata-modules/serverless-function/utils/from-create-serverless-function-input-to-flat-serverless-function.util.ts index 3eb63f5506..1ce791d3cd 100644 --- a/packages/twenty-server/src/engine/metadata-modules/serverless-function/utils/from-create-serverless-function-input-to-flat-serverless-function.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/serverless-function/utils/from-create-serverless-function-input-to-flat-serverless-function.util.ts @@ -38,8 +38,8 @@ export const fromCreateServerlessFunctionInputToFlatServerlessFunction = ({ rawCreateServerlessFunctionInput.handlerName ?? DEFAULT_HANDLER_NAME, universalIdentifier: rawCreateServerlessFunctionInput.universalIdentifier ?? id, - createdAt: currentDate, - updatedAt: currentDate, + createdAt: currentDate.toISOString(), + updatedAt: currentDate.toISOString(), deletedAt: null, latestVersion: null, publishedVersions: [], diff --git a/packages/twenty-server/src/engine/metadata-modules/serverless-function/utils/from-serverless-function-entity-to-flat-serverless-function.type.ts b/packages/twenty-server/src/engine/metadata-modules/serverless-function/utils/from-serverless-function-entity-to-flat-serverless-function.type.ts index 17c7858fce..7c5adce3c4 100644 --- a/packages/twenty-server/src/engine/metadata-modules/serverless-function/utils/from-serverless-function-entity-to-flat-serverless-function.type.ts +++ b/packages/twenty-server/src/engine/metadata-modules/serverless-function/utils/from-serverless-function-entity-to-flat-serverless-function.type.ts @@ -19,6 +19,9 @@ export const fromServerlessFunctionEntityToFlatServerlessFunction = ( return { ...serverlessFunctionWithoutRelations, + createdAt: serverlessFunctionEntity.createdAt.toISOString(), + updatedAt: serverlessFunctionEntity.updatedAt.toISOString(), + deletedAt: serverlessFunctionEntity.deletedAt?.toISOString() ?? null, cronTriggerIds: serverlessFunctionEntity.cronTriggers.map((el) => el.id) ?? [], routeTriggerIds: diff --git a/packages/twenty-server/src/engine/metadata-modules/view-field/services/view-field-v2.service.ts b/packages/twenty-server/src/engine/metadata-modules/view-field/services/view-field-v2.service.ts index 2d123c400d..3e4d3ec05b 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view-field/services/view-field-v2.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view-field/services/view-field-v2.service.ts @@ -22,6 +22,7 @@ import { ViewFieldException, ViewFieldExceptionCode, } from 'src/engine/metadata-modules/view-field/exceptions/view-field.exception'; +import { fromFlatViewFieldToViewFieldDto } from 'src/engine/metadata-modules/view-field/utils/from-flat-view-field-to-view-field-dto.util'; import { WorkspaceMigrationBuilderExceptionV2 } from 'src/engine/workspace-manager/workspace-migration-v2/exceptions/workspace-migration-builder-exception-v2'; import { WorkspaceMigrationValidateBuildAndRunService } from 'src/engine/workspace-manager/workspace-migration-v2/services/workspace-migration-validate-build-and-run-service'; @@ -117,7 +118,7 @@ export class ViewFieldV2Service { return findManyFlatEntityByIdInFlatEntityMapsOrThrow({ flatEntityIds: flatViewFieldsToCreate.map((el) => el.id), flatEntityMaps: recomputedExistingFlatViewFieldMaps, - }); + }).map(fromFlatViewFieldToViewFieldDto); } async updateOne({ @@ -171,10 +172,12 @@ export class ViewFieldV2Service { }, ); - return findFlatEntityByIdInFlatEntityMapsOrThrow({ - flatEntityId: optimisticallyUpdatedFlatView.id, - flatEntityMaps: recomputedExistingFlatViewFieldMaps, - }); + return fromFlatViewFieldToViewFieldDto( + findFlatEntityByIdInFlatEntityMapsOrThrow({ + flatEntityId: optimisticallyUpdatedFlatView.id, + flatEntityMaps: recomputedExistingFlatViewFieldMaps, + }), + ); } async deleteOne({ @@ -228,10 +231,12 @@ export class ViewFieldV2Service { }, ); - return findFlatEntityByIdInFlatEntityMapsOrThrow({ - flatEntityId: optimisticallyUpdatedFlatViewWithDeletedAt.id, - flatEntityMaps: recomputedExistingFlatViewFieldMaps, - }); + return fromFlatViewFieldToViewFieldDto( + findFlatEntityByIdInFlatEntityMapsOrThrow({ + flatEntityId: optimisticallyUpdatedFlatViewWithDeletedAt.id, + flatEntityMaps: recomputedExistingFlatViewFieldMaps, + }), + ); } async destroyOne({ @@ -277,7 +282,7 @@ export class ViewFieldV2Service { ); } - return existingViewFieldToDelete; + return fromFlatViewFieldToViewFieldDto(existingViewFieldToDelete); } async findByWorkspaceId(workspaceId: string): Promise { diff --git a/packages/twenty-server/src/engine/metadata-modules/view-field/utils/from-flat-view-field-to-view-field-dto.util.ts b/packages/twenty-server/src/engine/metadata-modules/view-field/utils/from-flat-view-field-to-view-field-dto.util.ts new file mode 100644 index 0000000000..d20d743e95 --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/view-field/utils/from-flat-view-field-to-view-field-dto.util.ts @@ -0,0 +1,15 @@ +import { type FlatViewField } from 'src/engine/metadata-modules/flat-view-field/types/flat-view-field.type'; +import { type ViewFieldDTO } from 'src/engine/metadata-modules/view-field/dtos/view-field.dto'; + +export const fromFlatViewFieldToViewFieldDto = ( + flatViewField: FlatViewField, +): ViewFieldDTO => { + const { createdAt, updatedAt, deletedAt, ...rest } = flatViewField; + + return { + ...rest, + createdAt: new Date(createdAt), + updatedAt: new Date(updatedAt), + deletedAt: deletedAt ? new Date(deletedAt) : null, + }; +}; diff --git a/packages/twenty-server/src/engine/metadata-modules/view-filter/services/view-filter.service.ts b/packages/twenty-server/src/engine/metadata-modules/view-filter/services/view-filter.service.ts index 559d40c2bc..69c00c7f96 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view-filter/services/view-filter.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view-filter/services/view-filter.service.ts @@ -17,6 +17,7 @@ import { DestroyViewFilterInput } from 'src/engine/metadata-modules/view-filter/ import { UpdateViewFilterInput } from 'src/engine/metadata-modules/view-filter/dtos/inputs/update-view-filter.input'; import { ViewFilterDTO } from 'src/engine/metadata-modules/view-filter/dtos/view-filter.dto'; import { ViewFilterEntity } from 'src/engine/metadata-modules/view-filter/entities/view-filter.entity'; +import { fromFlatViewFilterToViewFilterDto } from 'src/engine/metadata-modules/view-filter/utils/from-flat-view-filter-to-view-filter-dto.util'; import { WorkspaceMigrationBuilderExceptionV2 } from 'src/engine/workspace-manager/workspace-migration-v2/exceptions/workspace-migration-builder-exception-v2'; import { WorkspaceMigrationValidateBuildAndRunService } from 'src/engine/workspace-manager/workspace-migration-v2/services/workspace-migration-validate-build-and-run-service'; @@ -86,10 +87,12 @@ export class ViewFilterService { }, ); - return findFlatEntityByIdInFlatEntityMapsOrThrow({ - flatEntityId: flatViewFilterToCreate.id, - flatEntityMaps: recomputedExistingFlatViewFilterMaps, - }); + return fromFlatViewFilterToViewFilterDto( + findFlatEntityByIdInFlatEntityMapsOrThrow({ + flatEntityId: flatViewFilterToCreate.id, + flatEntityMaps: recomputedExistingFlatViewFilterMaps, + }), + ); } async updateOne({ @@ -143,10 +146,12 @@ export class ViewFilterService { }, ); - return findFlatEntityByIdInFlatEntityMapsOrThrow({ - flatEntityId: optimisticallyUpdatedFlatViewFilter.id, - flatEntityMaps: recomputedExistingFlatViewFilterMaps, - }); + return fromFlatViewFilterToViewFilterDto( + findFlatEntityByIdInFlatEntityMapsOrThrow({ + flatEntityId: optimisticallyUpdatedFlatViewFilter.id, + flatEntityMaps: recomputedExistingFlatViewFilterMaps, + }), + ); } async deleteOne({ @@ -202,10 +207,12 @@ export class ViewFilterService { }, ); - return findFlatEntityByIdInFlatEntityMapsOrThrow({ - flatEntityId: optimisticallyUpdatedFlatViewFilterWithDeletedAt.id, - flatEntityMaps: recomputedExistingFlatViewFilterMaps, - }); + return fromFlatViewFilterToViewFilterDto( + findFlatEntityByIdInFlatEntityMapsOrThrow({ + flatEntityId: optimisticallyUpdatedFlatViewFilterWithDeletedAt.id, + flatEntityMaps: recomputedExistingFlatViewFilterMaps, + }), + ); } async destroyOne({ @@ -251,7 +258,7 @@ export class ViewFilterService { ); } - return existingViewFilterToDelete; + return fromFlatViewFilterToViewFilterDto(existingViewFilterToDelete); } async findByWorkspaceId(workspaceId: string): Promise { diff --git a/packages/twenty-server/src/engine/metadata-modules/view-filter/utils/from-flat-view-filter-to-view-filter-dto.util.ts b/packages/twenty-server/src/engine/metadata-modules/view-filter/utils/from-flat-view-filter-to-view-filter-dto.util.ts new file mode 100644 index 0000000000..565a62cf48 --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/view-filter/utils/from-flat-view-filter-to-view-filter-dto.util.ts @@ -0,0 +1,15 @@ +import { type FlatViewFilter } from 'src/engine/metadata-modules/flat-view-filter/types/flat-view-filter.type'; +import { type ViewFilterDTO } from 'src/engine/metadata-modules/view-filter/dtos/view-filter.dto'; + +export const fromFlatViewFilterToViewFilterDto = ( + flatViewFilter: FlatViewFilter, +): ViewFilterDTO => { + const { createdAt, updatedAt, deletedAt, ...rest } = flatViewFilter; + + return { + ...rest, + createdAt: new Date(createdAt), + updatedAt: new Date(updatedAt), + deletedAt: deletedAt ? new Date(deletedAt) : null, + }; +}; diff --git a/packages/twenty-server/src/engine/metadata-modules/view-group/services/view-group.service.ts b/packages/twenty-server/src/engine/metadata-modules/view-group/services/view-group.service.ts index f654012cec..c0e68199fc 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view-group/services/view-group.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view-group/services/view-group.service.ts @@ -22,6 +22,7 @@ import { ViewGroupException, ViewGroupExceptionCode, } from 'src/engine/metadata-modules/view-group/exceptions/view-group.exception'; +import { fromFlatViewGroupToViewGroupDto } from 'src/engine/metadata-modules/view-group/utils/from-flat-view-group-to-view-group-dto.util'; import { WorkspaceMigrationBuilderExceptionV2 } from 'src/engine/workspace-manager/workspace-migration-v2/exceptions/workspace-migration-builder-exception-v2'; import { WorkspaceMigrationValidateBuildAndRunService } from 'src/engine/workspace-manager/workspace-migration-v2/services/workspace-migration-validate-build-and-run-service'; @@ -138,7 +139,7 @@ export class ViewGroupService { return findManyFlatEntityByIdInFlatEntityMapsOrThrow({ flatEntityIds: flatViewGroupsToCreate.map((el) => el.id), flatEntityMaps: recomputedExistingFlatViewGroupMaps, - }); + }).map(fromFlatViewGroupToViewGroupDto); } async updateOne({ @@ -192,10 +193,12 @@ export class ViewGroupService { }, ); - return findFlatEntityByIdInFlatEntityMapsOrThrow({ - flatEntityId: optimisticallyUpdatedFlatViewGroup.id, - flatEntityMaps: recomputedExistingFlatViewGroupMaps, - }); + return fromFlatViewGroupToViewGroupDto( + findFlatEntityByIdInFlatEntityMapsOrThrow({ + flatEntityId: optimisticallyUpdatedFlatViewGroup.id, + flatEntityMaps: recomputedExistingFlatViewGroupMaps, + }), + ); } async deleteOne({ @@ -251,10 +254,12 @@ export class ViewGroupService { }, ); - return findFlatEntityByIdInFlatEntityMapsOrThrow({ - flatEntityId: optimisticallyUpdatedFlatViewGroupWithDeletedAt.id, - flatEntityMaps: recomputedExistingFlatViewGroupMaps, - }); + return fromFlatViewGroupToViewGroupDto( + findFlatEntityByIdInFlatEntityMapsOrThrow({ + flatEntityId: optimisticallyUpdatedFlatViewGroupWithDeletedAt.id, + flatEntityMaps: recomputedExistingFlatViewGroupMaps, + }), + ); } async destroyOne({ @@ -300,7 +305,7 @@ export class ViewGroupService { ); } - return existingViewGroupToDelete; + return fromFlatViewGroupToViewGroupDto(existingViewGroupToDelete); } async findByWorkspaceId(workspaceId: string): Promise { diff --git a/packages/twenty-server/src/engine/metadata-modules/view-group/utils/from-flat-view-group-to-view-group-dto.util.ts b/packages/twenty-server/src/engine/metadata-modules/view-group/utils/from-flat-view-group-to-view-group-dto.util.ts new file mode 100644 index 0000000000..eca1dfdb94 --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/view-group/utils/from-flat-view-group-to-view-group-dto.util.ts @@ -0,0 +1,15 @@ +import { type FlatViewGroup } from 'src/engine/metadata-modules/flat-view-group/types/flat-view-group.type'; +import { type ViewGroupDTO } from 'src/engine/metadata-modules/view-group/dtos/view-group.dto'; + +export const fromFlatViewGroupToViewGroupDto = ( + flatViewGroup: FlatViewGroup, +): ViewGroupDTO => { + const { createdAt, updatedAt, deletedAt, ...rest } = flatViewGroup; + + return { + ...rest, + createdAt: new Date(createdAt), + updatedAt: new Date(updatedAt), + deletedAt: deletedAt ? new Date(deletedAt) : null, + }; +}; diff --git a/packages/twenty-server/src/engine/metadata-modules/view/services/view.service.ts b/packages/twenty-server/src/engine/metadata-modules/view/services/view.service.ts index f7fae70788..7687d949ff 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view/services/view.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view/services/view.service.ts @@ -21,6 +21,7 @@ import { UpdateViewInput } from 'src/engine/metadata-modules/view/dtos/inputs/up import { ViewDTO } from 'src/engine/metadata-modules/view/dtos/view.dto'; import { ViewEntity } from 'src/engine/metadata-modules/view/entities/view.entity'; import { ViewVisibility } from 'src/engine/metadata-modules/view/enums/view-visibility.enum'; +import { fromFlatViewToViewDto } from 'src/engine/metadata-modules/view/utils/from-flat-view-to-view-dto.util'; import { WorkspaceMigrationBuilderExceptionV2 } from 'src/engine/workspace-manager/workspace-migration-v2/exceptions/workspace-migration-builder-exception-v2'; import { WorkspaceMigrationValidateBuildAndRunService } from 'src/engine/workspace-manager/workspace-migration-v2/services/workspace-migration-validate-build-and-run-service'; @@ -104,10 +105,12 @@ export class ViewService { }, ); - return findFlatEntityByIdInFlatEntityMapsOrThrow({ - flatEntityId: flatViewToCreate.id, - flatEntityMaps: recomputedExistingFlatViewMaps, - }); + return fromFlatViewToViewDto( + findFlatEntityByIdInFlatEntityMapsOrThrow({ + flatEntityId: flatViewToCreate.id, + flatEntityMaps: recomputedExistingFlatViewMaps, + }), + ); } async updateOne({ @@ -178,10 +181,12 @@ export class ViewService { }, ); - return findFlatEntityByIdInFlatEntityMapsOrThrow({ - flatEntityId: updateViewInput.id, - flatEntityMaps: recomputedExistingFlatViewMaps, - }); + return fromFlatViewToViewDto( + findFlatEntityByIdInFlatEntityMapsOrThrow({ + flatEntityId: updateViewInput.id, + flatEntityMaps: recomputedExistingFlatViewMaps, + }), + ); } async deleteOne({ @@ -235,10 +240,12 @@ export class ViewService { }, ); - return findFlatEntityByIdInFlatEntityMapsOrThrow({ - flatEntityId: deleteViewInput.id, - flatEntityMaps: recomputedExistingFlatViewMaps, - }); + return fromFlatViewToViewDto( + findFlatEntityByIdInFlatEntityMapsOrThrow({ + flatEntityId: deleteViewInput.id, + flatEntityMaps: recomputedExistingFlatViewMaps, + }), + ); } async destroyOne({ @@ -283,7 +290,7 @@ export class ViewService { ); } - return flatViewFromDestroyInput; + return fromFlatViewToViewDto(flatViewFromDestroyInput); } processViewNameWithTemplate( diff --git a/packages/twenty-server/src/engine/metadata-modules/view/utils/from-flat-view-to-view-dto.util.ts b/packages/twenty-server/src/engine/metadata-modules/view/utils/from-flat-view-to-view-dto.util.ts new file mode 100644 index 0000000000..d2c3e93042 --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/view/utils/from-flat-view-to-view-dto.util.ts @@ -0,0 +1,13 @@ +import { type FlatView } from 'src/engine/metadata-modules/flat-view/types/flat-view.type'; +import { type ViewDTO } from 'src/engine/metadata-modules/view/dtos/view.dto'; + +export const fromFlatViewToViewDto = (flatView: FlatView): ViewDTO => { + const { createdAt, updatedAt, deletedAt, ...rest } = flatView; + + return { + ...rest, + createdAt: new Date(createdAt), + updatedAt: new Date(updatedAt), + deletedAt: deletedAt ? new Date(deletedAt) : null, + }; +}; diff --git a/packages/twenty-server/src/engine/twenty-orm/entity-manager/workspace-entity-manager.spec.ts b/packages/twenty-server/src/engine/twenty-orm/entity-manager/workspace-entity-manager.spec.ts index 22deb35ba3..a7d9b7f25c 100644 --- a/packages/twenty-server/src/engine/twenty-orm/entity-manager/workspace-entity-manager.spec.ts +++ b/packages/twenty-server/src/engine/twenty-orm/entity-manager/workspace-entity-manager.spec.ts @@ -114,8 +114,8 @@ describe('WorkspaceEntityManager', () => { isLabelSyncedWithName: false, isUIReadOnly: false, duplicateCriteria: null, - createdAt: new Date(), - updatedAt: new Date(), + createdAt: new Date().toISOString(), + updatedAt: new Date().toISOString(), }; (getObjectMetadataFromEntityTarget as jest.Mock).mockReturnValue( diff --git a/packages/twenty-server/src/engine/twenty-orm/utils/__tests__/get-column-name-to-field-metadata-id.util.spec.ts b/packages/twenty-server/src/engine/twenty-orm/utils/__tests__/get-column-name-to-field-metadata-id.util.spec.ts index 469f35f44c..c32efd73e5 100644 --- a/packages/twenty-server/src/engine/twenty-orm/utils/__tests__/get-column-name-to-field-metadata-id.util.spec.ts +++ b/packages/twenty-server/src/engine/twenty-orm/utils/__tests__/get-column-name-to-field-metadata-id.util.spec.ts @@ -30,8 +30,8 @@ describe('getColumnNameToFieldMetadataIdMap', () => { viewIds: [], applicationId: null, isLabelSyncedWithName: false, - createdAt: new Date(), - updatedAt: new Date(), + createdAt: new Date().toISOString(), + updatedAt: new Date().toISOString(), shortcut: null, description: null, standardOverrides: null, diff --git a/packages/twenty-server/src/engine/twenty-orm/utils/__tests__/get-field-metadata-id-to-column-names-map.util.spec.ts b/packages/twenty-server/src/engine/twenty-orm/utils/__tests__/get-field-metadata-id-to-column-names-map.util.spec.ts index 7e8e9c90b9..35ba0ae57c 100644 --- a/packages/twenty-server/src/engine/twenty-orm/utils/__tests__/get-field-metadata-id-to-column-names-map.util.spec.ts +++ b/packages/twenty-server/src/engine/twenty-orm/utils/__tests__/get-field-metadata-id-to-column-names-map.util.spec.ts @@ -30,8 +30,8 @@ describe('getFieldMetadataIdToColumnNamesMap', () => { viewIds: [], applicationId: null, isLabelSyncedWithName: false, - createdAt: new Date(), - updatedAt: new Date(), + createdAt: new Date().toISOString(), + updatedAt: new Date().toISOString(), shortcut: null, description: null, standardOverrides: null, diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/index/create-standard-index-flat-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/index/create-standard-index-flat-metadata.util.ts index 693a3872e4..95b2b2f4d2 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/index/create-standard-index-flat-metadata.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/index/create-standard-index-flat-metadata.util.ts @@ -78,7 +78,7 @@ export const createStandardIndexFlatMetadata = < return generateFlatIndexMetadataWithNameOrThrow({ flatIndex: { - createdAt: now, + createdAt: now.toISOString(), applicationId: twentyStandardApplicationId, indexType, indexWhereClause, @@ -86,17 +86,17 @@ export const createStandardIndexFlatMetadata = < isUnique, objectMetadataId, universalIdentifier: indexDefinition.universalIdentifier, - updatedAt: now, + updatedAt: now.toISOString(), workspaceId, id: indexId, flatIndexFieldMetadatas: flatFieldMetadatas.map( ({ id: fieldMetadataId }, index) => ({ - createdAt: now, + createdAt: now.toISOString(), fieldMetadataId, id: v4(), indexMetadataId: indexId, order: index, - updatedAt: now, + updatedAt: now.toISOString(), }), ), }, diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/object-metadata/create-standard-object-flat-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/object-metadata/create-standard-object-flat-metadata.util.ts index 8304bef00e..945d496778 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/object-metadata/create-standard-object-flat-metadata.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/object-metadata/create-standard-object-flat-metadata.util.ts @@ -81,7 +81,7 @@ export const createStandardObjectFlatMetadata = < fieldMetadataIds: [], indexMetadataIds: [], viewIds: [], - createdAt: now, - updatedAt: now, + createdAt: now.toISOString(), + updatedAt: now.toISOString(), id: standardFieldMetadataIdByObjectAndFieldName[nameSingular].id, }); diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/types/extract-record-typeorm-non-nullable-date-properties.type.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/types/extract-record-typeorm-non-nullable-date-properties.type.ts new file mode 100644 index 0000000000..962d8fd50b --- /dev/null +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/types/extract-record-typeorm-non-nullable-date-properties.type.ts @@ -0,0 +1,5 @@ +export type ExtractRecordTypeOrmNonNullableDateProperties = NonNullable< + { + [P in keyof T]: null extends T[P] ? never : T[P] extends Date ? P : never; + }[keyof T] +>; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/types/extract-record-typeorm-nullable-date-properties.type.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/types/extract-record-typeorm-nullable-date-properties.type.ts new file mode 100644 index 0000000000..8f1619f85e --- /dev/null +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/types/extract-record-typeorm-nullable-date-properties.type.ts @@ -0,0 +1,9 @@ +export type ExtractRecordTypeOrmNullableDateProperties = NonNullable< + { + [P in keyof T]: null extends T[P] + ? NonNullable extends Date + ? P + : never + : never; + }[keyof T] +>; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/add-flat-entity-to-flat-entity-maps-through-mutation-or-throw.util.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/add-flat-entity-to-flat-entity-maps-through-mutation-or-throw.util.ts index 29815d3649..cfd5d86de8 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/add-flat-entity-to-flat-entity-maps-through-mutation-or-throw.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/add-flat-entity-to-flat-entity-maps-through-mutation-or-throw.util.ts @@ -5,17 +5,17 @@ import { FlatEntityMapsExceptionCode, } from 'src/engine/metadata-modules/flat-entity/exceptions/flat-entity-maps.exception'; import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; -import { type FlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; +import { type SyncableFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; type AddFlatEntityToFlatEntityMapsThroughMutationOrThrowArgs< - T extends FlatEntity, + T extends SyncableFlatEntity, > = { flatEntity: T; flatEntityMapsToMutate: FlatEntityMaps; }; export const addFlatEntityToFlatEntityMapsThroughMutationOrThrow = < - T extends FlatEntity, + T extends SyncableFlatEntity, >({ flatEntity, flatEntityMapsToMutate, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/delete-flat-entity-from-flat-entity-maps-through-mutation-or-throw.util.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/delete-flat-entity-from-flat-entity-maps-through-mutation-or-throw.util.ts index 8b24c39666..88d9b27ae1 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/delete-flat-entity-from-flat-entity-maps-through-mutation-or-throw.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/delete-flat-entity-from-flat-entity-maps-through-mutation-or-throw.util.ts @@ -5,17 +5,17 @@ import { FlatEntityMapsExceptionCode, } from 'src/engine/metadata-modules/flat-entity/exceptions/flat-entity-maps.exception'; import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; -import { type FlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; +import { type SyncableFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; export type DeleteFlatEntityFromFlatEntityMapsThroughMutationOrThrowArgs< - T extends FlatEntity, + T extends SyncableFlatEntity, > = { entityToDeleteId: string; flatEntityMapsToMutate: FlatEntityMaps; }; export const deleteFlatEntityFromFlatEntityMapsThroughMutationOrThrow = < - T extends FlatEntity, + T extends SyncableFlatEntity, >({ flatEntityMapsToMutate, entityToDeleteId, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/replace-flat-entity-in-flat-entity-maps-through-mutation-or-throw.util.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/replace-flat-entity-in-flat-entity-maps-through-mutation-or-throw.util.ts index 80eaa7175f..2ab7a46f5f 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/replace-flat-entity-in-flat-entity-maps-through-mutation-or-throw.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/replace-flat-entity-in-flat-entity-maps-through-mutation-or-throw.util.ts @@ -1,17 +1,17 @@ import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; -import { type FlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; +import { type SyncableFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; import { addFlatEntityToFlatEntityMapsThroughMutationOrThrow } from 'src/engine/workspace-manager/workspace-migration-v2/utils/add-flat-entity-to-flat-entity-maps-through-mutation-or-throw.util'; import { deleteFlatEntityFromFlatEntityMapsThroughMutationOrThrow } from 'src/engine/workspace-manager/workspace-migration-v2/utils/delete-flat-entity-from-flat-entity-maps-through-mutation-or-throw.util'; export type ReplaceFlatEntityInFlatEntityMapsThroughMutationOrThrowArgs< - T extends FlatEntity, + T extends SyncableFlatEntity, > = { flatEntity: T; flatEntityMapsToMutate: FlatEntityMaps; }; export const replaceFlatEntityInFlatEntityMapsThroughMutationOrThrow = < - T extends FlatEntity, + T extends SyncableFlatEntity, >({ flatEntity, flatEntityMapsToMutate, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/types/failed-flat-entity-validation.type.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/types/failed-flat-entity-validation.type.ts index 37e1f50354..3af9312c23 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/types/failed-flat-entity-validation.type.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/types/failed-flat-entity-validation.type.ts @@ -1,6 +1,6 @@ import { type MessageDescriptor } from '@lingui/core'; -import { type FlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; +import { type SyncableFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; import { type WorkspaceMigrationActionTypeV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-action-common-v2'; export type FlatEntityValidationError = { @@ -10,7 +10,7 @@ export type FlatEntityValidationError = { value?: unknown; }; -export type FailedFlatEntityValidation = { +export type FailedFlatEntityValidation = { type: WorkspaceMigrationActionTypeV2; errors: FlatEntityValidationError[]; flatEntityMinimalInformation: Partial; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/comparators/workspace-agent.comparator.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/comparators/workspace-agent.comparator.ts index d3e3928347..de044ea904 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/comparators/workspace-agent.comparator.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/comparators/workspace-agent.comparator.ts @@ -35,7 +35,7 @@ export class WorkspaceAgentComparator { }: WorkspaceAgentComparatorArgs): AgentComparatorResult[] { const results: AgentComparatorResult[] = []; - const keyFactory = (agent: FlatAgent) => agent.universalIdentifier; + const keyFactory = (agent: FlatAgent) => agent.universalIdentifier ?? ''; const fromAgentMap = transformMetadataForComparison(fromFlatAgents, { shouldIgnoreProperty: (property) => diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/factories/standard-role.factory.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/factories/standard-role.factory.ts index b107430b83..824d7ba7c3 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/factories/standard-role.factory.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/factories/standard-role.factory.ts @@ -31,7 +31,7 @@ export class StandardRoleFactory { ...flatRole, id: existingRole.id, universalIdentifier: roleDefinition.standardId || existingRole.id, - createdAt: existingRole.createdAt, + createdAt: existingRole.createdAt.toISOString(), }); } else { computedRoles.push({ diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-sync/interfaces/syncable-entity.interface.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-sync/interfaces/syncable-entity.interface.ts index a0f03a66d5..59110bb1a1 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-sync/interfaces/syncable-entity.interface.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-sync/interfaces/syncable-entity.interface.ts @@ -7,7 +7,8 @@ import type { ApplicationEntity } from 'src/engine/core-modules/application/appl }) export abstract class SyncableEntity { @Column({ nullable: true, type: 'uuid' }) - universalIdentifier: string | null; + // TODO should not be nullable + universalIdentifier: string; @Column({ nullable: true, type: 'uuid' }) applicationId: string | null; diff --git a/packages/twenty-server/src/modules/workflow/workflow-trigger/automated-trigger/listeners/__tests__/workflow-database-event-trigger.listener.spec.ts b/packages/twenty-server/src/modules/workflow/workflow-trigger/automated-trigger/listeners/__tests__/workflow-database-event-trigger.listener.spec.ts index 2012a17ae9..c23a1adf4c 100644 --- a/packages/twenty-server/src/modules/workflow/workflow-trigger/automated-trigger/listeners/__tests__/workflow-database-event-trigger.listener.spec.ts +++ b/packages/twenty-server/src/modules/workflow/workflow-trigger/automated-trigger/listeners/__tests__/workflow-database-event-trigger.listener.spec.ts @@ -36,8 +36,8 @@ describe('WorkflowDatabaseEventTriggerListener', () => { isRemote: false, isAuditLogged: true, isSearchable: true, - createdAt: new Date(), - updatedAt: new Date(), + createdAt: new Date().toISOString(), + updatedAt: new Date().toISOString(), icon: 'Icon123', universalIdentifier: 'test-object-metadata', fieldMetadataIds: [],