diff --git a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-update-many-resolver.service.ts b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-update-many-resolver.service.ts index 149674209..d88542237 100644 --- a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-update-many-resolver.service.ts +++ b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-update-many-resolver.service.ts @@ -66,8 +66,7 @@ export class GraphqlQueryUpdateManyResolverService const data = formatData(args.data, objectMetadataMapItem); const result = await withFilterQueryBuilder - .update() - .set(data) + .update(data) .returning('*') .execute(); diff --git a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-update-one-resolver.service.ts b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-update-one-resolver.service.ts index 7be966cc6..6fc4e1a72 100644 --- a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-update-one-resolver.service.ts +++ b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-update-one-resolver.service.ts @@ -61,13 +61,11 @@ export class GraphqlQueryUpdateOneResolverService objectMetadataMapItem.nameSingular, ); - const withFilterQueryBuilder = queryBuilder.where({ id: args.id }); - const data = formatData(args.data, objectMetadataMapItem); - const result = await withFilterQueryBuilder - .update() - .set(data) + const result = await queryBuilder + .update(data) + .where({ id: args.id }) .returning('*') .execute(); diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.service.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.service.ts index b4102db85..ff08237d2 100644 --- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.service.ts @@ -49,8 +49,10 @@ import { generateMigrationName } from 'src/engine/metadata-modules/workspace-mig import { WorkspaceMigrationColumnActionType, WorkspaceMigrationColumnDrop, + WorkspaceMigrationTableAction, WorkspaceMigrationTableActionType, } from 'src/engine/metadata-modules/workspace-migration/workspace-migration.entity'; +import { WorkspaceMigrationFactory } from 'src/engine/metadata-modules/workspace-migration/workspace-migration.factory'; import { WorkspaceMigrationService } from 'src/engine/metadata-modules/workspace-migration/workspace-migration.service'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; import { computeObjectTargetTable } from 'src/engine/utils/compute-object-target-table.util'; @@ -103,6 +105,7 @@ export class ObjectMetadataService extends TypeOrmQueryService [ - { - name: computeObjectTargetTable(createdObjectMetadata), - action: WorkspaceMigrationTableActionType.CREATE, - } satisfies WorkspaceMigrationTableAction, // Add activity target relation { name: computeObjectTargetTable(activityTargetObjectMetadata), diff --git a/packages/twenty-server/src/engine/twenty-orm/base.workspace-entity.ts b/packages/twenty-server/src/engine/twenty-orm/base.workspace-entity.ts index d9a19a689..53355304c 100644 --- a/packages/twenty-server/src/engine/twenty-orm/base.workspace-entity.ts +++ b/packages/twenty-server/src/engine/twenty-orm/base.workspace-entity.ts @@ -55,5 +55,5 @@ export abstract class BaseWorkspaceEntity { }, }) @WorkspaceIsNullable() - deletedAt?: string | null; + deletedAt: string | null; } 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 deleted file mode 100644 index 11a831f80..000000000 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-runner/utils/custom-table-default-column.util.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { TableColumnOptions } from 'typeorm'; - -import { FieldActorSource } from 'src/engine/metadata-modules/field-metadata/composite-types/actor.composite-type'; - -export const customTableDefaultColumns = ( - tableName: string, -): TableColumnOptions[] => [ - { - name: 'id', - type: 'uuid', - isPrimary: true, - default: 'public.uuid_generate_v4()', - }, - { - name: 'createdAt', - type: 'timestamptz', - default: 'now()', - }, - { - name: 'updatedAt', - type: 'timestamptz', - default: 'now()', - }, - { - name: 'deletedAt', - type: 'timestamptz', - isNullable: true, - }, - { - name: 'position', - type: 'float', - isNullable: true, - }, - { - name: 'name', - type: 'text', - isNullable: false, - default: "'Untitled'", - }, - { - name: 'createdBySource', - type: 'enum', - enumName: `${tableName}_createdBySource_enum`, - enum: Object.values(FieldActorSource), - isNullable: false, - default: `'${FieldActorSource.MANUAL}'`, - }, - { name: 'createdByWorkspaceMemberId', type: 'uuid', isNullable: true }, - { - name: 'createdByName', - type: 'text', - isNullable: false, - default: "''", - }, -]; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-runner/utils/table-default-column.util.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-runner/utils/table-default-column.util.ts new file mode 100644 index 000000000..8967eb83f --- /dev/null +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-runner/utils/table-default-column.util.ts @@ -0,0 +1,10 @@ +import { TableColumnOptions } from 'typeorm'; + +export const tableDefaultColumns = (): TableColumnOptions[] => [ + { + name: 'id', + type: 'uuid', + isPrimary: true, + default: 'public.uuid_generate_v4()', + }, +]; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-runner/workspace-migration-runner.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-runner/workspace-migration-runner.service.ts index 2d6a20e14..db2072c84 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-runner/workspace-migration-runner.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-runner/workspace-migration-runner.service.ts @@ -26,10 +26,10 @@ import { WorkspaceMigrationService } from 'src/engine/metadata-modules/workspace import { WorkspaceDataSourceService } from 'src/engine/workspace-datasource/workspace-datasource.service'; import { WorkspaceMigrationEnumService } from 'src/engine/workspace-manager/workspace-migration-runner/services/workspace-migration-enum.service'; import { convertOnDeleteActionToOnDelete } from 'src/engine/workspace-manager/workspace-migration-runner/utils/convert-on-delete-action-to-on-delete.util'; +import { tableDefaultColumns } from 'src/engine/workspace-manager/workspace-migration-runner/utils/table-default-column.util'; import { isDefined } from 'src/utils/is-defined'; import { WorkspaceMigrationTypeService } from './services/workspace-migration-type.service'; -import { customTableDefaultColumns } from './utils/custom-table-default-column.util'; @Injectable() export class WorkspaceMigrationRunnerService { @@ -121,7 +121,12 @@ export class WorkspaceMigrationRunnerService { ) { switch (tableMigration.action) { case WorkspaceMigrationTableActionType.CREATE: - await this.createTable(queryRunner, schemaName, tableMigration.name); + await this.createTable( + queryRunner, + schemaName, + tableMigration.name, + tableMigration.columns, + ); break; case WorkspaceMigrationTableActionType.ALTER: { if (tableMigration.newName) { @@ -244,16 +249,26 @@ export class WorkspaceMigrationRunnerService { queryRunner: QueryRunner, schemaName: string, tableName: string, + columns?: WorkspaceMigrationColumnAction[], ) { await queryRunner.createTable( new Table({ name: tableName, schema: schemaName, - columns: customTableDefaultColumns(tableName), + columns: tableDefaultColumns(), }), true, ); + if (columns && columns.length > 0) { + await this.handleColumnChanges( + queryRunner, + schemaName, + tableName, + columns, + ); + } + // Enable totalCount for the table await queryRunner.query(` COMMENT ON TABLE "${schemaName}"."${tableName}" IS '@graphql({"totalCount": {"enabled": true}})'; diff --git a/packages/twenty-server/src/modules/calendar/common/types/calendar-event.ts b/packages/twenty-server/src/modules/calendar/common/types/calendar-event.ts index 00f4c82ac..ae817cc3f 100644 --- a/packages/twenty-server/src/modules/calendar/common/types/calendar-event.ts +++ b/packages/twenty-server/src/modules/calendar/common/types/calendar-event.ts @@ -5,6 +5,7 @@ export type CalendarEvent = Omit< CalendarEventWorkspaceEntity, | 'createdAt' | 'updatedAt' + | 'deletedAt' | 'calendarChannelEventAssociations' | 'calendarEventParticipants' | 'conferenceLink' @@ -19,6 +20,7 @@ export type CalendarEventParticipant = Omit< | 'id' | 'createdAt' | 'updatedAt' + | 'deletedAt' | 'personId' | 'workspaceMemberId' | 'person' diff --git a/packages/twenty-server/src/modules/messaging/message-import-manager/types/message.ts b/packages/twenty-server/src/modules/messaging/message-import-manager/types/message.ts index 4ec483869..b665e5489 100644 --- a/packages/twenty-server/src/modules/messaging/message-import-manager/types/message.ts +++ b/packages/twenty-server/src/modules/messaging/message-import-manager/types/message.ts @@ -6,6 +6,7 @@ export type Message = Omit< MessageWorkspaceEntity, | 'createdAt' | 'updatedAt' + | 'deletedAt' | 'messageChannelMessageAssociations' | 'messageParticipants' | 'messageThread' @@ -25,6 +26,7 @@ export type MessageParticipant = Omit< | 'id' | 'createdAt' | 'updatedAt' + | 'deletedAt' | 'personId' | 'workspaceMemberId' | 'person'