From 316055be645eea13b415e67c645157b578fb7b82 Mon Sep 17 00:00:00 2001 From: Weiko Date: Fri, 29 Aug 2025 18:39:11 +0200 Subject: [PATCH] Replace view tables position columns from integer to double (#14162) --- ...6483901854-updateViewsPositionsToDouble.ts | 43 +++++++++++++++++++ .../view/entities/view-field.entity.ts | 2 +- .../view/entities/view-filter-group.entity.ts | 4 +- .../view/entities/view-filter.entity.ts | 4 +- .../view/entities/view-group.entity.ts | 2 +- .../core-modules/view/entities/view.entity.ts | 2 +- 6 files changed, 50 insertions(+), 7 deletions(-) create mode 100644 packages/twenty-server/src/database/typeorm/core/migrations/common/1756483901854-updateViewsPositionsToDouble.ts diff --git a/packages/twenty-server/src/database/typeorm/core/migrations/common/1756483901854-updateViewsPositionsToDouble.ts b/packages/twenty-server/src/database/typeorm/core/migrations/common/1756483901854-updateViewsPositionsToDouble.ts new file mode 100644 index 0000000000..dae0551842 --- /dev/null +++ b/packages/twenty-server/src/database/typeorm/core/migrations/common/1756483901854-updateViewsPositionsToDouble.ts @@ -0,0 +1,43 @@ +import { type MigrationInterface, type QueryRunner } from 'typeorm'; + +export class UpdateViewsPositionsToDouble1756483901854 + implements MigrationInterface +{ + name = 'UpdateViewsPositionsToDouble1756483901854'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "core"."viewFilter" ALTER COLUMN "positionInViewFilterGroup" TYPE double precision`, + ); + await queryRunner.query( + `ALTER TABLE "core"."viewFilterGroup" ALTER COLUMN "positionInViewFilterGroup" TYPE double precision`, + ); + await queryRunner.query( + `ALTER TABLE "core"."viewGroup" ALTER COLUMN "position" TYPE double precision`, + ); + await queryRunner.query( + `ALTER TABLE "core"."view" ALTER COLUMN "position" TYPE double precision`, + ); + await queryRunner.query( + `ALTER TABLE "core"."viewField" ALTER COLUMN "position" TYPE double precision`, + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "core"."viewField" ALTER COLUMN "position" TYPE integer`, + ); + await queryRunner.query( + `ALTER TABLE "core"."view" ALTER COLUMN "position" TYPE integer`, + ); + await queryRunner.query( + `ALTER TABLE "core"."viewGroup" ALTER COLUMN "position" TYPE integer`, + ); + await queryRunner.query( + `ALTER TABLE "core"."viewFilterGroup" ALTER COLUMN "positionInViewFilterGroup" TYPE integer`, + ); + await queryRunner.query( + `ALTER TABLE "core"."viewFilter" ALTER COLUMN "positionInViewFilterGroup" TYPE integer`, + ); + } +} diff --git a/packages/twenty-server/src/engine/core-modules/view/entities/view-field.entity.ts b/packages/twenty-server/src/engine/core-modules/view/entities/view-field.entity.ts index e1c366ca17..b34b3db01e 100644 --- a/packages/twenty-server/src/engine/core-modules/view/entities/view-field.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/view/entities/view-field.entity.ts @@ -47,7 +47,7 @@ export class ViewFieldEntity extends SyncableEntity { @Column({ nullable: false, type: 'int', default: 0 }) size: number; - @Column({ nullable: false, type: 'int', default: 0 }) + @Column({ nullable: false, type: 'double precision', default: 0 }) position: number; @Column({ diff --git a/packages/twenty-server/src/engine/core-modules/view/entities/view-filter-group.entity.ts b/packages/twenty-server/src/engine/core-modules/view/entities/view-filter-group.entity.ts index 65a92e7ff7..c3f1101ae5 100644 --- a/packages/twenty-server/src/engine/core-modules/view/entities/view-filter-group.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/view/entities/view-filter-group.entity.ts @@ -36,8 +36,8 @@ export class ViewFilterGroupEntity extends SyncableEntity { }) logicalOperator: ViewFilterGroupLogicalOperator; - @Column({ nullable: true, type: 'int' }) - positionInViewFilterGroup?: number | null; + @Column({ nullable: true, type: 'double precision' }) + positionInViewFilterGroup: number | null; @Column({ nullable: false, type: 'uuid' }) viewId: string; diff --git a/packages/twenty-server/src/engine/core-modules/view/entities/view-filter.entity.ts b/packages/twenty-server/src/engine/core-modules/view/entities/view-filter.entity.ts index 13ad44961b..f312d7ffbe 100644 --- a/packages/twenty-server/src/engine/core-modules/view/entities/view-filter.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/view/entities/view-filter.entity.ts @@ -50,8 +50,8 @@ export class ViewFilterEntity extends SyncableEntity { @Column({ nullable: true, type: 'uuid' }) viewFilterGroupId?: string | null; - @Column({ nullable: true, type: 'int' }) - positionInViewFilterGroup?: number | null; + @Column({ nullable: true, type: 'double precision' }) + positionInViewFilterGroup: number | null; @Column({ nullable: true, type: 'text', default: null }) subFieldName?: string | null; diff --git a/packages/twenty-server/src/engine/core-modules/view/entities/view-group.entity.ts b/packages/twenty-server/src/engine/core-modules/view/entities/view-group.entity.ts index 7948c45465..6432519866 100644 --- a/packages/twenty-server/src/engine/core-modules/view/entities/view-group.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/view/entities/view-group.entity.ts @@ -38,7 +38,7 @@ export class ViewGroupEntity extends SyncableEntity { @Column({ nullable: false, type: 'text' }) fieldValue: string; - @Column({ nullable: false, type: 'int', default: 0 }) + @Column({ nullable: false, type: 'double precision', default: 0 }) position: number; @Column({ nullable: false, type: 'uuid' }) diff --git a/packages/twenty-server/src/engine/core-modules/view/entities/view.entity.ts b/packages/twenty-server/src/engine/core-modules/view/entities/view.entity.ts index ffd04f57ed..07850cdbcf 100644 --- a/packages/twenty-server/src/engine/core-modules/view/entities/view.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/view/entities/view.entity.ts @@ -66,7 +66,7 @@ export class ViewEntity extends SyncableEntity { @Column({ nullable: false, type: 'text' }) icon: string; - @Column({ nullable: false, type: 'int', default: 0 }) + @Column({ nullable: false, type: 'double precision', default: 0 }) position: number; @Column({ nullable: false, default: false, type: 'boolean' })