diff --git a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-create-many-resolver.service.ts b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-create-many-resolver.service.ts index 7912889ee..edff55b91 100644 --- a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-create-many-resolver.service.ts +++ b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-create-many-resolver.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@nestjs/common'; -import { capitalize } from 'twenty-shared/utils'; +import { capitalize, isDefined } from 'twenty-shared/utils'; import { In, InsertResult, ObjectLiteral } from 'typeorm'; import { @@ -21,6 +21,7 @@ import { ObjectMetadataMaps } from 'src/engine/metadata-modules/types/object-met import { WorkspaceRepository } from 'src/engine/twenty-orm/repository/workspace.repository'; import { formatData } from 'src/engine/twenty-orm/utils/format-data.util'; import { formatResult } from 'src/engine/twenty-orm/utils/format-result.util'; +import { AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type'; @Injectable() export class GraphqlQueryCreateManyResolverService extends GraphqlQueryBaseResolverService< @@ -30,7 +31,7 @@ export class GraphqlQueryCreateManyResolverService extends GraphqlQueryBaseResol async resolve( executionArgs: GraphqlQueryResolverExecutionArgs, ): Promise { - const { authContext, objectMetadataItemWithFieldMaps, objectMetadataMaps } = + const { objectMetadataItemWithFieldMaps, objectMetadataMaps } = executionArgs.options; const { roleId } = executionArgs; @@ -44,12 +45,6 @@ export class GraphqlQueryCreateManyResolverService extends GraphqlQueryBaseResol objectMetadataMaps, ); - this.apiEventEmitterService.emitCreateEvents( - upsertedRecords, - authContext, - objectMetadataItemWithFieldMaps, - ); - const shouldBypassPermissionChecks = executionArgs.isExecutedByApiKey; await this.processNestedRelationsIfNeeded( @@ -102,18 +97,24 @@ export class GraphqlQueryCreateManyResolverService extends GraphqlQueryBaseResol raw: [], }; - await this.processRecordsToUpdate( - recordsToUpdate, - executionArgs.repository, + await this.processRecordsToUpdate({ + partialRecordsToUpdate: recordsToUpdate, + existingRecords, + repository: executionArgs.repository, objectMetadataItemWithFieldMaps, + objectMetadataMaps: executionArgs.options.objectMetadataMaps, result, - ); + authContext: executionArgs.options.authContext, + }); - await this.processRecordsToInsert( + await this.processRecordsToInsert({ recordsToInsert, - executionArgs.repository, + repository: executionArgs.repository, result, - ); + objectMetadataItemWithFieldMaps, + objectMetadataMaps: executionArgs.options.objectMetadataMaps, + authContext: executionArgs.options.authContext, + }); return result; } @@ -259,47 +260,116 @@ export class GraphqlQueryCreateManyResolverService extends GraphqlQueryBaseResol return { recordsToUpdate, recordsToInsert }; } - private async processRecordsToUpdate( - recordsToUpdate: Partial[], - repository: WorkspaceRepository, - objectMetadataItemWithFieldMaps: ObjectMetadataItemWithFieldMaps, - result: InsertResult, - ): Promise { - for (const record of recordsToUpdate) { - const recordId = record.id as string; + private async processRecordsToUpdate({ + partialRecordsToUpdate, + existingRecords, + repository, + objectMetadataItemWithFieldMaps, + objectMetadataMaps, + result, + authContext, + }: { + partialRecordsToUpdate: Partial[]; + existingRecords: Partial[]; + repository: WorkspaceRepository; + objectMetadataItemWithFieldMaps: ObjectMetadataItemWithFieldMaps; + objectMetadataMaps: ObjectMetadataMaps; + result: InsertResult; + authContext: AuthContext; + }): Promise { + for (const partialRecordToUpdate of partialRecordsToUpdate) { + const recordId = partialRecordToUpdate.id as string; // we should not update an existing record's createdBy value - const recordWithoutCreatedByUpdate = this.getRecordWithoutCreatedBy( - record, - objectMetadataItemWithFieldMaps, - ); + const partialRecordToUpdateWithoutCreatedByUpdate = + this.getRecordWithoutCreatedBy( + partialRecordToUpdate, + objectMetadataItemWithFieldMaps, + ); - const formattedRecord = formatData( - recordWithoutCreatedByUpdate, + const formattedPartialRecordToUpdate = formatData( + partialRecordToUpdateWithoutCreatedByUpdate, objectMetadataItemWithFieldMaps, ); // TODO: we should align update and insert // For insert, formating is done in the server // While for update, formatting is done at the resolver level - await repository.update(recordId, formattedRecord); + await repository.update(recordId, formattedPartialRecordToUpdate); + result.identifiers.push({ id: recordId }); result.generatedMaps.push({ id: recordId }); + + const [updatedRecord] = await repository.find({ + where: { id: recordId }, + }); + + if (!isDefined(updatedRecord)) { + continue; + } + + const record = formatResult( + updatedRecord, + objectMetadataItemWithFieldMaps, + objectMetadataMaps, + ); + + const existingRecord = formatResult( + existingRecords.find((record) => record.id === recordId), + objectMetadataItemWithFieldMaps, + objectMetadataMaps, + ); + + this.apiEventEmitterService.emitUpdateEvents({ + existingRecords: [existingRecord], + records: [record], + updatedFields: Object.keys(formattedPartialRecordToUpdate), + authContext, + objectMetadataItem: objectMetadataItemWithFieldMaps, + }); } } - private async processRecordsToInsert( - recordsToInsert: Partial[], - repository: WorkspaceRepository, - result: InsertResult, - ): Promise { + private async processRecordsToInsert({ + recordsToInsert, + repository, + objectMetadataItemWithFieldMaps, + objectMetadataMaps, + result, + authContext, + }: { + recordsToInsert: Partial[]; + repository: WorkspaceRepository; + objectMetadataItemWithFieldMaps: ObjectMetadataItemWithFieldMaps; + objectMetadataMaps: ObjectMetadataMaps; + result: InsertResult; + authContext: AuthContext; + }): Promise { + const formattedInsertedRecords: ObjectRecord[] = []; + if (recordsToInsert.length > 0) { const insertResult = await repository.insert(recordsToInsert); result.identifiers.push(...insertResult.identifiers); result.generatedMaps.push(...insertResult.generatedMaps); result.raw.push(...insertResult.raw); + + formattedInsertedRecords.push( + ...insertResult.raw.map((record: ObjectRecord) => + formatResult( + record, + objectMetadataItemWithFieldMaps, + objectMetadataMaps, + ), + ), + ); } + + this.apiEventEmitterService.emitCreateEvents({ + records: formattedInsertedRecords, + authContext, + objectMetadataItem: objectMetadataItemWithFieldMaps, + }); } private async fetchUpsertedRecords( diff --git a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-create-one-resolver.service.ts b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-create-one-resolver.service.ts index d6203409e..16e4fb4f3 100644 --- a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-create-one-resolver.service.ts +++ b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-create-one-resolver.service.ts @@ -53,11 +53,11 @@ export class GraphqlQueryCreateOneResolverService extends GraphqlQueryBaseResolv objectMetadataMaps, ); - this.apiEventEmitterService.emitCreateEvents( - upsertedRecords, + this.apiEventEmitterService.emitCreateEvents({ + records: upsertedRecords, authContext, - objectMetadataItemWithFieldMaps, - ); + objectMetadataItem: objectMetadataItemWithFieldMaps, + }); if (executionArgs.graphqlQuerySelectedFieldsResult.relations) { await this.processNestedRelationsHelper.processNestedRelations({ diff --git a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-delete-many-resolver.service.ts b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-delete-many-resolver.service.ts index 530208b91..988cd0134 100644 --- a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-delete-many-resolver.service.ts +++ b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-delete-many-resolver.service.ts @@ -54,11 +54,11 @@ export class GraphqlQueryDeleteManyResolverService extends GraphqlQueryBaseResol objectMetadataMaps, ); - this.apiEventEmitterService.emitDeletedEvents( - formattedDeletedRecords, + this.apiEventEmitterService.emitDeletedEvents({ + records: formattedDeletedRecords, authContext, - objectMetadataItemWithFieldMaps, - ); + objectMetadataItem: objectMetadataItemWithFieldMaps, + }); if (executionArgs.graphqlQuerySelectedFieldsResult.relations) { await this.processNestedRelationsHelper.processNestedRelations({ diff --git a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-delete-one-resolver.service.ts b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-delete-one-resolver.service.ts index 1b60a9732..7cfdc9c35 100644 --- a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-delete-one-resolver.service.ts +++ b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-delete-one-resolver.service.ts @@ -47,11 +47,11 @@ export class GraphqlQueryDeleteOneResolverService extends GraphqlQueryBaseResolv objectMetadataMaps, ); - this.apiEventEmitterService.emitDeletedEvents( - formattedDeletedRecords, + this.apiEventEmitterService.emitDeletedEvents({ + records: formattedDeletedRecords, authContext, - objectMetadataItemWithFieldMaps, - ); + objectMetadataItem: objectMetadataItemWithFieldMaps, + }); if (formattedDeletedRecords.length === 0) { throw new GraphqlQueryRunnerException( diff --git a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-destroy-many-resolver.service.ts b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-destroy-many-resolver.service.ts index 768142f98..e84cdcf1a 100644 --- a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-destroy-many-resolver.service.ts +++ b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-destroy-many-resolver.service.ts @@ -52,11 +52,11 @@ export class GraphqlQueryDestroyManyResolverService extends GraphqlQueryBaseReso objectMetadataMaps, ); - this.apiEventEmitterService.emitDestroyEvents( - deletedRecords, + this.apiEventEmitterService.emitDestroyEvents({ + records: deletedRecords, authContext, - objectMetadataItemWithFieldMaps, - ); + objectMetadataItem: objectMetadataItemWithFieldMaps, + }); if (executionArgs.graphqlQuerySelectedFieldsResult.relations) { await this.processNestedRelationsHelper.processNestedRelations({ diff --git a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-destroy-one-resolver.service.ts b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-destroy-one-resolver.service.ts index 473bda6a2..efaff22ba 100644 --- a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-destroy-one-resolver.service.ts +++ b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-destroy-one-resolver.service.ts @@ -52,11 +52,11 @@ export class GraphqlQueryDestroyOneResolverService extends GraphqlQueryBaseResol objectMetadataMaps, ); - this.apiEventEmitterService.emitDestroyEvents( - deletedRecords, + this.apiEventEmitterService.emitDestroyEvents({ + records: deletedRecords, authContext, - objectMetadataItemWithFieldMaps, - ); + objectMetadataItem: objectMetadataItemWithFieldMaps, + }); if (executionArgs.graphqlQuerySelectedFieldsResult.relations) { await this.processNestedRelationsHelper.processNestedRelations({ diff --git a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-restore-many-resolver.service.ts b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-restore-many-resolver.service.ts index 75b0ecec3..2de7e2818 100644 --- a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-restore-many-resolver.service.ts +++ b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-restore-many-resolver.service.ts @@ -54,11 +54,11 @@ export class GraphqlQueryRestoreManyResolverService extends GraphqlQueryBaseReso objectMetadataMaps, ); - this.apiEventEmitterService.emitRestoreEvents( - formattedRestoredRecords, + this.apiEventEmitterService.emitRestoreEvents({ + records: formattedRestoredRecords, authContext, - objectMetadataItemWithFieldMaps, - ); + objectMetadataItem: objectMetadataItemWithFieldMaps, + }); if (executionArgs.graphqlQuerySelectedFieldsResult.relations) { await this.processNestedRelationsHelper.processNestedRelations({ diff --git a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-restore-one-resolver.service.ts b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-restore-one-resolver.service.ts index db35a4974..a4dad8e6a 100644 --- a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-restore-one-resolver.service.ts +++ b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-restore-one-resolver.service.ts @@ -47,11 +47,11 @@ export class GraphqlQueryRestoreOneResolverService extends GraphqlQueryBaseResol objectMetadataMaps, ); - this.apiEventEmitterService.emitRestoreEvents( - formattedRestoredRecords, + this.apiEventEmitterService.emitRestoreEvents({ + records: formattedRestoredRecords, authContext, - objectMetadataItemWithFieldMaps, - ); + objectMetadataItem: objectMetadataItemWithFieldMaps, + }); if (formattedRestoredRecords.length === 0) { throw new GraphqlQueryRunnerException( 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 0d521c6c8..619d95e13 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 @@ -89,13 +89,13 @@ export class GraphqlQueryUpdateManyResolverService extends GraphqlQueryBaseResol objectMetadataMaps, ); - this.apiEventEmitterService.emitUpdateEvents( - formattedExistingRecords, - formattedUpdatedRecords, - Object.keys(executionArgs.args.data), + this.apiEventEmitterService.emitUpdateEvents({ + existingRecords: formattedExistingRecords, + records: formattedUpdatedRecords, + updatedFields: Object.keys(executionArgs.args.data), authContext, - objectMetadataItemWithFieldMaps, - ); + objectMetadataItem: objectMetadataItemWithFieldMaps, + }); if (executionArgs.graphqlQuerySelectedFieldsResult.relations) { await this.processNestedRelationsHelper.processNestedRelations({ 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 0f0bee483..4ce8fd01b 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 @@ -74,13 +74,13 @@ export class GraphqlQueryUpdateOneResolverService extends GraphqlQueryBaseResolv objectMetadataMaps, ); - this.apiEventEmitterService.emitUpdateEvents( - formattedExistingRecords, - formattedUpdatedRecords, - Object.keys(executionArgs.args.data), + this.apiEventEmitterService.emitUpdateEvents({ + existingRecords: formattedExistingRecords, + records: formattedUpdatedRecords, + updatedFields: Object.keys(executionArgs.args.data), authContext, - objectMetadataItemWithFieldMaps, - ); + objectMetadataItem: objectMetadataItemWithFieldMaps, + }); if (formattedUpdatedRecords.length === 0) { throw new GraphqlQueryRunnerException( diff --git a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/services/api-event-emitter.service.ts b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/services/api-event-emitter.service.ts index f88aec717..d16f667d4 100644 --- a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/services/api-event-emitter.service.ts +++ b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/services/api-event-emitter.service.ts @@ -12,11 +12,15 @@ import { WorkspaceEventEmitter } from 'src/engine/workspace-event-emitter/worksp export class ApiEventEmitterService { constructor(private readonly workspaceEventEmitter: WorkspaceEventEmitter) {} - public emitCreateEvents( - records: T[], - authContext: AuthContext, - objectMetadataItem: ObjectMetadataInterface, - ): void { + public emitCreateEvents({ + records, + authContext, + objectMetadataItem, + }: { + records: T[]; + authContext: AuthContext; + objectMetadataItem: ObjectMetadataInterface; + }): void { this.workspaceEventEmitter.emitDatabaseBatchEvent({ objectMetadataNameSingular: objectMetadataItem.nameSingular, action: DatabaseEventAction.CREATED, @@ -33,13 +37,19 @@ export class ApiEventEmitterService { }); } - public emitUpdateEvents( - existingRecords: T[], - records: T[], - updatedFields: string[], - authContext: AuthContext, - objectMetadataItem: ObjectMetadataInterface, - ): void { + public emitUpdateEvents({ + existingRecords, + records, + updatedFields, + authContext, + objectMetadataItem, + }: { + existingRecords: T[]; + records: T[]; + updatedFields: string[]; + authContext: AuthContext; + objectMetadataItem: ObjectMetadataInterface; + }): void { const mappedExistingRecords = existingRecords.reduce( (acc, { id, ...record }) => ({ ...acc, @@ -78,11 +88,15 @@ export class ApiEventEmitterService { }); } - public emitDeletedEvents( - records: T[], - authContext: AuthContext, - objectMetadataItem: ObjectMetadataInterface, - ): void { + public emitDeletedEvents({ + records, + authContext, + objectMetadataItem, + }: { + records: T[]; + authContext: AuthContext; + objectMetadataItem: ObjectMetadataInterface; + }): void { this.workspaceEventEmitter.emitDatabaseBatchEvent({ objectMetadataNameSingular: objectMetadataItem.nameSingular, action: DatabaseEventAction.DELETED, @@ -101,11 +115,15 @@ export class ApiEventEmitterService { }); } - public emitRestoreEvents( - records: T[], - authContext: AuthContext, - objectMetadataItem: ObjectMetadataInterface, - ): void { + public emitRestoreEvents({ + records, + authContext, + objectMetadataItem, + }: { + records: T[]; + authContext: AuthContext; + objectMetadataItem: ObjectMetadataInterface; + }): void { this.workspaceEventEmitter.emitDatabaseBatchEvent({ objectMetadataNameSingular: objectMetadataItem.nameSingular, action: DatabaseEventAction.RESTORED, @@ -124,11 +142,15 @@ export class ApiEventEmitterService { }); } - public emitDestroyEvents( - records: T[], - authContext: AuthContext, - objectMetadataItem: ObjectMetadataInterface, - ): void { + public emitDestroyEvents({ + records, + authContext, + objectMetadataItem, + }: { + records: T[]; + authContext: AuthContext; + objectMetadataItem: ObjectMetadataInterface; + }): void { this.workspaceEventEmitter.emitDatabaseBatchEvent({ objectMetadataNameSingular: objectMetadataItem.nameSingular, action: DatabaseEventAction.DESTROYED, diff --git a/packages/twenty-server/src/engine/api/rest/core/handlers/rest-api-create-many.handler.ts b/packages/twenty-server/src/engine/api/rest/core/handlers/rest-api-create-many.handler.ts index d42affa12..fd3e9bf4d 100644 --- a/packages/twenty-server/src/engine/api/rest/core/handlers/rest-api-create-many.handler.ts +++ b/packages/twenty-server/src/engine/api/rest/core/handlers/rest-api-create-many.handler.ts @@ -54,11 +54,11 @@ export class RestApiCreateManyHandler extends RestApiBaseHandler { const createdRecords = await repository.save(recordsToCreate); - this.apiEventEmitterService.emitCreateEvents( - createdRecords, - this.getAuthContextFromRequest(request), - objectMetadata.objectMetadataMapItem, - ); + this.apiEventEmitterService.emitCreateEvents({ + records: createdRecords, + authContext: this.getAuthContextFromRequest(request), + objectMetadataItem: objectMetadata.objectMetadataMapItem, + }); const records = await this.getRecord({ recordIds: createdRecords.map((record) => record.id), diff --git a/packages/twenty-server/src/engine/api/rest/core/handlers/rest-api-create-one.handler.ts b/packages/twenty-server/src/engine/api/rest/core/handlers/rest-api-create-one.handler.ts index 7c5a48de3..943b5459b 100644 --- a/packages/twenty-server/src/engine/api/rest/core/handlers/rest-api-create-one.handler.ts +++ b/packages/twenty-server/src/engine/api/rest/core/handlers/rest-api-create-one.handler.ts @@ -37,11 +37,11 @@ export class RestApiCreateOneHandler extends RestApiBaseHandler { const createdRecord = await repository.save(recordToCreate); - this.apiEventEmitterService.emitCreateEvents( - [createdRecord], - this.getAuthContextFromRequest(request), - objectMetadata.objectMetadataMapItem, - ); + this.apiEventEmitterService.emitCreateEvents({ + records: [createdRecord], + authContext: this.getAuthContextFromRequest(request), + objectMetadataItem: objectMetadata.objectMetadataMapItem, + }); const records = await this.getRecord({ recordIds: [createdRecord.id], diff --git a/packages/twenty-server/src/engine/api/rest/core/handlers/rest-api-delete-one.handler.ts b/packages/twenty-server/src/engine/api/rest/core/handlers/rest-api-delete-one.handler.ts index f49f01079..e9a152a3d 100644 --- a/packages/twenty-server/src/engine/api/rest/core/handlers/rest-api-delete-one.handler.ts +++ b/packages/twenty-server/src/engine/api/rest/core/handlers/rest-api-delete-one.handler.ts @@ -23,11 +23,11 @@ export class RestApiDeleteOneHandler extends RestApiBaseHandler { await repository.delete(recordId); - this.apiEventEmitterService.emitDestroyEvents( - [recordToDelete], - this.getAuthContextFromRequest(request), - objectMetadata.objectMetadataMapItem, - ); + this.apiEventEmitterService.emitDestroyEvents({ + records: [recordToDelete], + authContext: this.getAuthContextFromRequest(request), + objectMetadataItem: objectMetadata.objectMetadataMapItem, + }); return this.formatResult({ operation: 'delete', diff --git a/packages/twenty-server/src/engine/api/rest/core/handlers/rest-api-update-one.handler.ts b/packages/twenty-server/src/engine/api/rest/core/handlers/rest-api-update-one.handler.ts index b55e7d7b0..f5539f634 100644 --- a/packages/twenty-server/src/engine/api/rest/core/handlers/rest-api-update-one.handler.ts +++ b/packages/twenty-server/src/engine/api/rest/core/handlers/rest-api-update-one.handler.ts @@ -33,13 +33,13 @@ export class RestApiUpdateOneHandler extends RestApiBaseHandler { ...overriddenBody, }); - this.apiEventEmitterService.emitUpdateEvents( - [recordToUpdate], - [updatedRecord], - Object.keys(request.body), - this.getAuthContextFromRequest(request), - objectMetadata.objectMetadataMapItem, - ); + this.apiEventEmitterService.emitUpdateEvents({ + existingRecords: [recordToUpdate], + records: [updatedRecord], + updatedFields: Object.keys(request.body), + authContext: this.getAuthContextFromRequest(request), + objectMetadataItem: objectMetadata.objectMetadataMapItem, + }); const records = await this.getRecord({ recordIds: [updatedRecord.id],