From 1829f4d0092acac2e690ef146fbbef02e9c05178 Mon Sep 17 00:00:00 2001 From: Weiko Date: Thu, 28 Mar 2024 22:39:41 +0100 Subject: [PATCH] Switch timestamp to timestamptz (#4696) * Switch timestamps to timestamptz * update standard/custom objects logic to use timestamptz * fix test --- .../1711633823798-useTimestampWithTZ.ts | 71 ++++++++++++++ .../1711619086385-useTimestampWithTZ.ts | 95 +++++++++++++++++++ .../__tests__/get-field-metadata-type.spec.ts | 2 +- .../utils/get-field-metadata-type.util.ts | 2 +- .../app-token/app-token.entity.ts | 10 +- .../billing-subscription-item.entity.ts | 6 +- .../entities/billing-subscription.entity.ts | 6 +- .../feature-flag/feature-flag.entity.ts | 4 +- .../user-workspace/user-workspace.entity.ts | 6 +- .../engine/core-modules/user/user.entity.ts | 8 +- .../workspace/workspace.entity.ts | 6 +- .../data-source/data-source.entity.ts | 4 +- .../field-metadata/field-metadata.entity.ts | 4 +- .../object-metadata/object-metadata.entity.ts | 4 +- .../relation-metadata.entity.ts | 4 +- .../remote-server/remote-server.entity.ts | 4 +- .../workspace-cache-version.entity.ts | 4 +- ...field-metadata-type-to-column-type.util.ts | 2 +- .../workspace-migration.entity.ts | 4 +- ...p-field-metadata-type-to-data-type.util.ts | 36 ------- .../utils/custom-table-default-column.util.ts | 6 +- 21 files changed, 209 insertions(+), 79 deletions(-) create mode 100644 packages/twenty-server/src/database/typeorm/core/migrations/1711633823798-useTimestampWithTZ.ts create mode 100644 packages/twenty-server/src/database/typeorm/metadata/migrations/1711619086385-useTimestampWithTZ.ts delete mode 100644 packages/twenty-server/src/engine/workspace-manager/workspace-health/utils/map-field-metadata-type-to-data-type.util.ts diff --git a/packages/twenty-server/src/database/typeorm/core/migrations/1711633823798-useTimestampWithTZ.ts b/packages/twenty-server/src/database/typeorm/core/migrations/1711633823798-useTimestampWithTZ.ts new file mode 100644 index 000000000..d2937d222 --- /dev/null +++ b/packages/twenty-server/src/database/typeorm/core/migrations/1711633823798-useTimestampWithTZ.ts @@ -0,0 +1,71 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class UseTimestampWithTZ1711633823798 implements MigrationInterface { + name = 'UseTimestampWithTZ1711633823798'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "core"."featureFlag" ALTER COLUMN "createdAt" TYPE TIMESTAMP WITH TIME ZONE USING "createdAt" AT TIME ZONE 'UTC'`, + ); + await queryRunner.query( + `ALTER TABLE "core"."featureFlag" ALTER COLUMN "updatedAt" TYPE TIMESTAMP WITH TIME ZONE USING "updatedAt" AT TIME ZONE 'UTC'`, + ); + await queryRunner.query( + `ALTER TABLE "core"."billingSubscriptionItem" ALTER COLUMN "deletedAt" TYPE TIMESTAMP WITH TIME ZONE USING "deletedAt" AT TIME ZONE 'UTC'`, + ); + await queryRunner.query( + `ALTER TABLE "core"."billingSubscription" ALTER COLUMN "deletedAt" TYPE TIMESTAMP WITH TIME ZONE USING "deletedAt" AT TIME ZONE 'UTC'`, + ); + await queryRunner.query( + `ALTER TABLE "core"."workspace" ALTER COLUMN "deletedAt" TYPE TIMESTAMP WITH TIME ZONE USING "deletedAt" AT TIME ZONE 'UTC'`, + ); + await queryRunner.query( + `ALTER TABLE "core"."user" ALTER COLUMN "deletedAt" TYPE TIMESTAMP WITH TIME ZONE USING "deletedAt" AT TIME ZONE 'UTC'`, + ); + await queryRunner.query( + `ALTER TABLE "core"."user" ALTER COLUMN "passwordResetTokenExpiresAt" TYPE TIMESTAMP WITH TIME ZONE USING "passwordResetTokenExpiresAt" AT TIME ZONE 'UTC'`, + ); + await queryRunner.query( + `ALTER TABLE "core"."userWorkspace" ALTER COLUMN "createdAt" TYPE TIMESTAMP WITH TIME ZONE USING "createdAt" AT TIME ZONE 'UTC'`, + ); + await queryRunner.query( + `ALTER TABLE "core"."userWorkspace" ALTER COLUMN "updatedAt" TYPE TIMESTAMP WITH TIME ZONE USING "updatedAt" AT TIME ZONE 'UTC'`, + ); + await queryRunner.query( + `ALTER TABLE "core"."userWorkspace" ALTER COLUMN "deletedAt" TYPE TIMESTAMP WITH TIME ZONE USING "deletedAt" AT TIME ZONE 'UTC'`, + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "core"."featureFlag" ALTER COLUMN "createdAt" TYPE TIMESTAMP`, + ); + await queryRunner.query( + `ALTER TABLE "core"."featureFlag" ALTER COLUMN "updatedAt" TYPE TIMESTAMP`, + ); + await queryRunner.query( + `ALTER TABLE "core"."billingSubscriptionItem" ALTER COLUMN "deletedAt" TYPE TIMESTAMP`, + ); + await queryRunner.query( + `ALTER TABLE "core"."billingSubscription" ALTER COLUMN "deletedAt" TYPE TIMESTAMP`, + ); + await queryRunner.query( + `ALTER TABLE "core"."workspace" ALTER COLUMN "deletedAt" TYPE TIMESTAMP`, + ); + await queryRunner.query( + `ALTER TABLE "core"."user" ALTER COLUMN "deletedAt" TYPE TIMESTAMP`, + ); + await queryRunner.query( + `ALTER TABLE "core"."user" ALTER COLUMN "passwordResetTokenExpiresAt" TYPE TIMESTAMP`, + ); + await queryRunner.query( + `ALTER TABLE "core"."userWorkspace" ALTER COLUMN "createdAt" TYPE TIMESTAMP`, + ); + await queryRunner.query( + `ALTER TABLE "core"."userWorkspace" ALTER COLUMN "updatedAt" TYPE TIMESTAMP`, + ); + await queryRunner.query( + `ALTER TABLE "core"."userWorkspace" ALTER COLUMN "deletedAt" TYPE TIMESTAMP`, + ); + } +} diff --git a/packages/twenty-server/src/database/typeorm/metadata/migrations/1711619086385-useTimestampWithTZ.ts b/packages/twenty-server/src/database/typeorm/metadata/migrations/1711619086385-useTimestampWithTZ.ts new file mode 100644 index 000000000..29ebffb78 --- /dev/null +++ b/packages/twenty-server/src/database/typeorm/metadata/migrations/1711619086385-useTimestampWithTZ.ts @@ -0,0 +1,95 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class UseTimestampWithTZ1711619086385 implements MigrationInterface { + name = 'UseTimestampWithTZ1711619086385'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "metadata"."workspaceMigration" ALTER COLUMN "appliedAt" TYPE TIMESTAMP WITH TIME ZONE USING "appliedAt" AT TIME ZONE 'UTC'`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."workspaceMigration" ALTER COLUMN "createdAt" TYPE TIMESTAMP WITH TIME ZONE USING "createdAt" AT TIME ZONE 'UTC'`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."workspaceCacheVersion" ALTER COLUMN "createdAt" TYPE TIMESTAMP WITH TIME ZONE USING "createdAt" AT TIME ZONE 'UTC'`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."workspaceCacheVersion" ALTER COLUMN "updatedAt" TYPE TIMESTAMP WITH TIME ZONE USING "updatedAt" AT TIME ZONE 'UTC'`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."remoteServer" ALTER COLUMN "createdAt" TYPE TIMESTAMP WITH TIME ZONE USING "createdAt" AT TIME ZONE 'UTC'`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."remoteServer" ALTER COLUMN "updatedAt" TYPE TIMESTAMP WITH TIME ZONE USING "updatedAt" AT TIME ZONE 'UTC'`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."dataSource" ALTER COLUMN "createdAt" TYPE TIMESTAMP WITH TIME ZONE USING "createdAt" AT TIME ZONE 'UTC'`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."dataSource" ALTER COLUMN "updatedAt" TYPE TIMESTAMP WITH TIME ZONE USING "updatedAt" AT TIME ZONE 'UTC'`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."objectMetadata" ALTER COLUMN "createdAt" TYPE TIMESTAMP WITH TIME ZONE USING "createdAt" AT TIME ZONE 'UTC'`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."objectMetadata" ALTER COLUMN "updatedAt" TYPE TIMESTAMP WITH TIME ZONE USING "updatedAt" AT TIME ZONE 'UTC'`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."fieldMetadata" ALTER COLUMN "createdAt" TYPE TIMESTAMP WITH TIME ZONE USING "createdAt" AT TIME ZONE 'UTC'`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."fieldMetadata" ALTER COLUMN "updatedAt" TYPE TIMESTAMP WITH TIME ZONE USING "updatedAt" AT TIME ZONE 'UTC'`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."relationMetadata" ALTER COLUMN "createdAt" TYPE TIMESTAMP WITH TIME ZONE USING "createdAt" AT TIME ZONE 'UTC'`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."relationMetadata" ALTER COLUMN "updatedAt" TYPE TIMESTAMP WITH TIME ZONE USING "updatedAt" AT TIME ZONE 'UTC'`, + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "metadata"."workspaceMigration" ALTER COLUMN "appliedAt" TYPE TIMESTAMP`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."workspaceMigration" ALTER COLUMN "createdAt" TYPE TIMESTAMP`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."workspaceCacheVersion" ALTER COLUMN "createdAt" TYPE TIMESTAMP`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."workspaceCacheVersion" ALTER COLUMN "updatedAt" TYPE TIMESTAMP`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."remoteServer" ALTER COLUMN "createdAt" TYPE TIMESTAMP`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."remoteServer" ALTER COLUMN "updatedAt" TYPE TIMESTAMP`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."dataSource" ALTER COLUMN "createdAt" TYPE TIMESTAMP`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."dataSource" ALTER COLUMN "updatedAt" TYPE TIMESTAMP`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."objectMetadata" ALTER COLUMN "createdAt" TYPE TIMESTAMP`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."objectMetadata" ALTER COLUMN "updatedAt" TYPE TIMESTAMP`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."fieldMetadata" ALTER COLUMN "createdAt" TYPE TIMESTAMP`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."fieldMetadata" ALTER COLUMN "updatedAt" TYPE TIMESTAMP`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."relationMetadata" ALTER COLUMN "createdAt" TYPE TIMESTAMP`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."relationMetadata" ALTER COLUMN "updatedAt" TYPE TIMESTAMP`, + ); + } +} diff --git a/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/utils/__tests__/get-field-metadata-type.spec.ts b/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/utils/__tests__/get-field-metadata-type.spec.ts index a2c311d3e..022eab2af 100644 --- a/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/utils/__tests__/get-field-metadata-type.spec.ts +++ b/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/utils/__tests__/get-field-metadata-type.spec.ts @@ -4,7 +4,7 @@ import { getFieldMetadataType } from 'src/engine/api/graphql/workspace-schema-bu describe('getFieldMetadataType', () => { it.each([ ['uuid', FieldMetadataType.UUID], - ['timestamp', FieldMetadataType.DATE_TIME], + ['timestamptz', FieldMetadataType.DATE_TIME], ])( 'should return correct FieldMetadataType for type %s', (type, expectedMetadataType) => { diff --git a/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/utils/get-field-metadata-type.util.ts b/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/utils/get-field-metadata-type.util.ts index 4784ff27c..8c9375689 100644 --- a/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/utils/get-field-metadata-type.util.ts +++ b/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/utils/get-field-metadata-type.util.ts @@ -2,7 +2,7 @@ import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/fi const typeOrmTypeMapping = new Map([ ['uuid', FieldMetadataType.UUID], - ['timestamp', FieldMetadataType.DATE_TIME], + ['timestamptz', FieldMetadataType.DATE_TIME], // Add more types here if we need to support more than id, and createdAt/updatedAt/deletedAt ]); diff --git a/packages/twenty-server/src/engine/core-modules/app-token/app-token.entity.ts b/packages/twenty-server/src/engine/core-modules/app-token/app-token.entity.ts index 9f960ba22..ddbdd7e2a 100644 --- a/packages/twenty-server/src/engine/core-modules/app-token/app-token.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/app-token/app-token.entity.ts @@ -52,20 +52,20 @@ export class AppToken { value: string; @Field() - @Column('timestamp with time zone') + @Column({ type: 'timestamptz' }) expiresAt: Date; - @Column('timestamp with time zone', { nullable: true }) + @Column({ nullable: true, type: 'timestamptz' }) deletedAt: Date | null; - @Column('timestamp with time zone', { nullable: true }) + @Column({ nullable: true, type: 'timestamptz' }) revokedAt: Date | null; @Field() - @CreateDateColumn({ type: 'timestamp with time zone' }) + @CreateDateColumn({ type: 'timestamptz' }) createdAt: Date; @Field() - @UpdateDateColumn({ type: 'timestamp with time zone' }) + @UpdateDateColumn({ type: 'timestamptz' }) updatedAt: Date; } diff --git a/packages/twenty-server/src/engine/core-modules/billing/entities/billing-subscription-item.entity.ts b/packages/twenty-server/src/engine/core-modules/billing/entities/billing-subscription-item.entity.ts index 648d0ade5..4b13cc2aa 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/entities/billing-subscription-item.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/entities/billing-subscription-item.entity.ts @@ -23,13 +23,13 @@ export class BillingSubscriptionItem { @PrimaryGeneratedColumn('uuid') id: string; - @Column({ nullable: true }) + @Column({ nullable: true, type: 'timestamptz' }) deletedAt?: Date; - @CreateDateColumn({ type: 'timestamp with time zone' }) + @CreateDateColumn({ type: 'timestamptz' }) createdAt: Date; - @UpdateDateColumn({ type: 'timestamp with time zone' }) + @UpdateDateColumn({ type: 'timestamptz' }) updatedAt: Date; @Column({ nullable: false }) diff --git a/packages/twenty-server/src/engine/core-modules/billing/entities/billing-subscription.entity.ts b/packages/twenty-server/src/engine/core-modules/billing/entities/billing-subscription.entity.ts index 9198e9a8c..c9da318e0 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/entities/billing-subscription.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/entities/billing-subscription.entity.ts @@ -23,13 +23,13 @@ export class BillingSubscription { @PrimaryGeneratedColumn('uuid') id: string; - @Column({ nullable: true }) + @Column({ nullable: true, type: 'timestamptz' }) deletedAt?: Date; - @CreateDateColumn({ type: 'timestamp with time zone' }) + @CreateDateColumn({ type: 'timestamptz' }) createdAt: Date; - @UpdateDateColumn({ type: 'timestamp with time zone' }) + @UpdateDateColumn({ type: 'timestamptz' }) updatedAt: Date; @ManyToOne(() => Workspace, (workspace) => workspace.billingSubscriptions, { diff --git a/packages/twenty-server/src/engine/core-modules/feature-flag/feature-flag.entity.ts b/packages/twenty-server/src/engine/core-modules/feature-flag/feature-flag.entity.ts index 036c340ca..1011745d5 100644 --- a/packages/twenty-server/src/engine/core-modules/feature-flag/feature-flag.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/feature-flag/feature-flag.entity.ts @@ -47,9 +47,9 @@ export class FeatureFlagEntity { @Column({ nullable: false }) value: boolean; - @CreateDateColumn() + @CreateDateColumn({ type: 'timestamptz' }) createdAt: Date; - @UpdateDateColumn() + @UpdateDateColumn({ type: 'timestamptz' }) updatedAt: Date; } diff --git a/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.entity.ts b/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.entity.ts index 45a83da72..cd6d18478 100644 --- a/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.entity.ts @@ -46,14 +46,14 @@ export class UserWorkspace { workspaceId: string; @Field() - @CreateDateColumn({ type: 'timestamp with time zone' }) + @CreateDateColumn({ type: 'timestamptz' }) createdAt: Date; @Field() - @UpdateDateColumn({ type: 'timestamp with time zone' }) + @UpdateDateColumn({ type: 'timestamptz' }) updatedAt: Date; @Field({ nullable: true }) - @Column('timestamp with time zone', { nullable: true }) + @Column({ nullable: true, type: 'timestamptz' }) deletedAt: Date; } diff --git a/packages/twenty-server/src/engine/core-modules/user/user.entity.ts b/packages/twenty-server/src/engine/core-modules/user/user.entity.ts index 31ea7c810..189881e3b 100644 --- a/packages/twenty-server/src/engine/core-modules/user/user.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/user/user.entity.ts @@ -56,15 +56,15 @@ export class User { canImpersonate: boolean; @Field() - @CreateDateColumn({ type: 'timestamp with time zone' }) + @CreateDateColumn({ type: 'timestamptz' }) createdAt: Date; @Field() - @UpdateDateColumn({ type: 'timestamp with time zone' }) + @UpdateDateColumn({ type: 'timestamptz' }) updatedAt: Date; @Field({ nullable: true }) - @Column({ nullable: true }) + @Column({ nullable: true, type: 'timestamptz' }) deletedAt: Date; @Field(() => Workspace, { nullable: false }) @@ -82,7 +82,7 @@ export class User { passwordResetToken: string; @Field({ nullable: true }) - @Column({ nullable: true }) + @Column({ nullable: true, type: 'timestamptz' }) passwordResetTokenExpiresAt: Date; @OneToMany(() => AppToken, (appToken) => appToken.user, { diff --git a/packages/twenty-server/src/engine/core-modules/workspace/workspace.entity.ts b/packages/twenty-server/src/engine/core-modules/workspace/workspace.entity.ts index dd9f4bc3c..4aea4e776 100644 --- a/packages/twenty-server/src/engine/core-modules/workspace/workspace.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/workspace/workspace.entity.ts @@ -45,15 +45,15 @@ export class Workspace { inviteHash?: string; @Field({ nullable: true }) - @Column({ nullable: true }) + @Column({ nullable: true, type: 'timestamptz' }) deletedAt?: Date; @Field() - @CreateDateColumn({ type: 'timestamp with time zone' }) + @CreateDateColumn({ type: 'timestamptz' }) createdAt: Date; @Field() - @UpdateDateColumn({ type: 'timestamp with time zone' }) + @UpdateDateColumn({ type: 'timestamptz' }) updatedAt: Date; @OneToMany(() => AppToken, (appToken) => appToken.workspace, { diff --git a/packages/twenty-server/src/engine/metadata-modules/data-source/data-source.entity.ts b/packages/twenty-server/src/engine/metadata-modules/data-source/data-source.entity.ts index 7224b7542..3553cf594 100644 --- a/packages/twenty-server/src/engine/metadata-modules/data-source/data-source.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/data-source/data-source.entity.ts @@ -40,9 +40,9 @@ export class DataSourceEntity { @Column({ nullable: false, type: 'uuid' }) workspaceId: string; - @CreateDateColumn() + @CreateDateColumn({ type: 'timestamptz' }) createdAt: Date; - @UpdateDateColumn() + @UpdateDateColumn({ type: 'timestamptz' }) updatedAt: Date; } diff --git a/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.entity.ts b/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.entity.ts index 6bfeb42ee..ff01d5533 100644 --- a/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.entity.ts @@ -117,9 +117,9 @@ export class FieldMetadataEntity< ) toRelationMetadata: RelationMetadataEntity; - @CreateDateColumn() + @CreateDateColumn({ type: 'timestamptz' }) createdAt: Date; - @UpdateDateColumn() + @UpdateDateColumn({ type: 'timestamptz' }) updatedAt: Date; } diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.entity.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.entity.ts index 0af78d9f1..ed2102881 100644 --- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.entity.ts @@ -101,9 +101,9 @@ export class ObjectMetadataEntity implements ObjectMetadataInterface { }) dataSource: DataSourceEntity; - @CreateDateColumn() + @CreateDateColumn({ type: 'timestamptz' }) createdAt: Date; - @UpdateDateColumn() + @UpdateDateColumn({ type: 'timestamptz' }) updatedAt: Date; } diff --git a/packages/twenty-server/src/engine/metadata-modules/relation-metadata/relation-metadata.entity.ts b/packages/twenty-server/src/engine/metadata-modules/relation-metadata/relation-metadata.entity.ts index 6c2f55ad3..ebe9146d8 100644 --- a/packages/twenty-server/src/engine/metadata-modules/relation-metadata/relation-metadata.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/relation-metadata/relation-metadata.entity.ts @@ -90,9 +90,9 @@ export class RelationMetadataEntity implements RelationMetadataInterface { @JoinColumn() toFieldMetadata: FieldMetadataEntity; - @CreateDateColumn() + @CreateDateColumn({ type: 'timestamptz' }) createdAt: Date; - @UpdateDateColumn() + @UpdateDateColumn({ type: 'timestamptz' }) updatedAt: Date; } diff --git a/packages/twenty-server/src/engine/metadata-modules/remote-server/remote-server.entity.ts b/packages/twenty-server/src/engine/metadata-modules/remote-server/remote-server.entity.ts index 71b8d090e..cd6edc5dd 100644 --- a/packages/twenty-server/src/engine/metadata-modules/remote-server/remote-server.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/remote-server/remote-server.entity.ts @@ -51,9 +51,9 @@ export class RemoteServerEntity { @Column({ nullable: false, type: 'uuid' }) workspaceId: string; - @CreateDateColumn() + @CreateDateColumn({ type: 'timestamptz' }) createdAt: Date; - @UpdateDateColumn() + @UpdateDateColumn({ type: 'timestamptz' }) updatedAt: Date; } diff --git a/packages/twenty-server/src/engine/metadata-modules/workspace-cache-version/workspace-cache-version.entity.ts b/packages/twenty-server/src/engine/metadata-modules/workspace-cache-version/workspace-cache-version.entity.ts index 892244630..fab0a85d5 100644 --- a/packages/twenty-server/src/engine/metadata-modules/workspace-cache-version/workspace-cache-version.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/workspace-cache-version/workspace-cache-version.entity.ts @@ -17,9 +17,9 @@ export class WorkspaceCacheVersionEntity { @Column() version: string; - @CreateDateColumn() + @CreateDateColumn({ type: 'timestamptz' }) createdAt: Date; - @UpdateDateColumn() + @UpdateDateColumn({ type: 'timestamptz' }) updatedAt: Date; } diff --git a/packages/twenty-server/src/engine/metadata-modules/workspace-migration/utils/field-metadata-type-to-column-type.util.ts b/packages/twenty-server/src/engine/metadata-modules/workspace-migration/utils/field-metadata-type-to-column-type.util.ts index c413da18c..c4d84d2b3 100644 --- a/packages/twenty-server/src/engine/metadata-modules/workspace-migration/utils/field-metadata-type-to-column-type.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/workspace-migration/utils/field-metadata-type-to-column-type.util.ts @@ -24,7 +24,7 @@ export const fieldMetadataTypeToColumnType = ( case FieldMetadataType.BOOLEAN: return 'boolean'; case FieldMetadataType.DATE_TIME: - return 'timestamp'; + return 'timestamptz'; case FieldMetadataType.RATING: case FieldMetadataType.SELECT: case FieldMetadataType.MULTI_SELECT: diff --git a/packages/twenty-server/src/engine/metadata-modules/workspace-migration/workspace-migration.entity.ts b/packages/twenty-server/src/engine/metadata-modules/workspace-migration/workspace-migration.entity.ts index edb9746fd..73a87cd16 100644 --- a/packages/twenty-server/src/engine/metadata-modules/workspace-migration/workspace-migration.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/workspace-migration/workspace-migration.entity.ts @@ -86,12 +86,12 @@ export class WorkspaceMigrationEntity { @Column({ default: false }) isCustom: boolean; - @Column({ nullable: true }) + @Column({ nullable: true, type: 'timestamptz' }) appliedAt?: Date; @Column({ nullable: false, type: 'uuid' }) workspaceId: string; - @CreateDateColumn() + @CreateDateColumn({ type: 'timestamptz' }) createdAt: Date; } diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-health/utils/map-field-metadata-type-to-data-type.util.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-health/utils/map-field-metadata-type-to-data-type.util.ts deleted file mode 100644 index f5fa6a893..000000000 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-health/utils/map-field-metadata-type-to-data-type.util.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { ConflictException } from '@nestjs/common'; - -import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; - -export const mapFieldMetadataTypeToDataType = ( - fieldMetadataType: FieldMetadataType, -): string => { - switch (fieldMetadataType) { - case FieldMetadataType.UUID: - return 'uuid'; - case FieldMetadataType.TEXT: - return 'text'; - case FieldMetadataType.PHONE: - case FieldMetadataType.EMAIL: - return 'varchar'; - case FieldMetadataType.NUMERIC: - return 'numeric'; - case FieldMetadataType.NUMBER: - case FieldMetadataType.PROBABILITY: - return 'double precision'; - case FieldMetadataType.BOOLEAN: - return 'boolean'; - case FieldMetadataType.DATE_TIME: - return 'timestamp'; - case FieldMetadataType.RAW_JSON: - return 'jsonb'; - case FieldMetadataType.RATING: - case FieldMetadataType.SELECT: - case FieldMetadataType.MULTI_SELECT: - return 'enum'; - default: - throw new ConflictException( - `Cannot convert ${fieldMetadataType} to data type.`, - ); - } -}; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-runner/utils/custom-table-default-column.util.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-runner/utils/custom-table-default-column.util.ts index 14f5ec5a0..f1eea9072 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-runner/utils/custom-table-default-column.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-runner/utils/custom-table-default-column.util.ts @@ -9,17 +9,17 @@ export const customTableDefaultColumns: TableColumnOptions[] = [ }, { name: 'createdAt', - type: 'timestamp', + type: 'timestamptz', default: 'now()', }, { name: 'updatedAt', - type: 'timestamp', + type: 'timestamptz', default: 'now()', }, { name: 'deletedAt', - type: 'timestamp', + type: 'timestamptz', isNullable: true, }, ];