6071 return only updated fields of records in zapier update trigger (#8193)

- move webhook triggers into `entity-events-to-db.listener.ts`
- refactor event management
- add a `@OnDatabaseEvent` decorator to manage database events
- add updatedFields in updated events
- update openApi webhooks docs
- update zapier integration
This commit is contained in:
martmull
2024-11-04 17:44:36 +01:00
committed by GitHub
parent 741020fbb0
commit 695991881f
62 changed files with 547 additions and 578 deletions

View File

@ -5,6 +5,8 @@ import { ObjectMetadataInterface } from 'src/engine/metadata-modules/field-metad
import { AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
import { WorkspaceEventEmitter } from 'src/engine/workspace-event-emitter/workspace-event-emitter';
import { objectRecordChangedValues } from 'src/engine/core-modules/event-emitter/utils/object-record-changed-values';
import { DatabaseEventAction } from 'src/engine/api/graphql/graphql-query-runner/enums/database-event-action';
@Injectable()
export class ApiEventEmitterService {
@ -16,7 +18,7 @@ export class ApiEventEmitterService {
objectMetadataItem: ObjectMetadataInterface,
): void {
this.workspaceEventEmitter.emit(
`${objectMetadataItem.nameSingular}.created`,
`${objectMetadataItem.nameSingular}.${DatabaseEventAction.CREATED}`,
records.map((record) => ({
userId: authContext.user?.id,
recordId: record.id,
@ -46,20 +48,28 @@ export class ApiEventEmitterService {
);
this.workspaceEventEmitter.emit(
`${objectMetadataItem.nameSingular}.updated`,
`${objectMetadataItem.nameSingular}.${DatabaseEventAction.UPDATED}`,
records.map((record) => {
const before = this.removeGraphQLAndNestedProperties(
mappedExistingRecords[record.id],
);
const after = this.removeGraphQLAndNestedProperties(record);
const diff = objectRecordChangedValues(
before,
after,
updatedFields,
objectMetadataItem,
);
return {
userId: authContext.user?.id,
recordId: record.id,
objectMetadata: objectMetadataItem,
properties: {
before: mappedExistingRecords[record.id]
? this.removeGraphQLAndNestedProperties(
mappedExistingRecords[record.id],
)
: undefined,
after: this.removeGraphQLAndNestedProperties(record),
before,
after,
updatedFields,
diff,
},
};
}),
@ -73,7 +83,7 @@ export class ApiEventEmitterService {
objectMetadataItem: ObjectMetadataInterface,
): void {
this.workspaceEventEmitter.emit(
`${objectMetadataItem.nameSingular}.deleted`,
`${objectMetadataItem.nameSingular}.${DatabaseEventAction.DELETED}`,
records.map((record) => {
return {
userId: authContext.user?.id,
@ -95,7 +105,7 @@ export class ApiEventEmitterService {
objectMetadataItem: ObjectMetadataInterface,
): void {
this.workspaceEventEmitter.emit(
`${objectMetadataItem.nameSingular}.destroyed`,
`${objectMetadataItem.nameSingular}.${DatabaseEventAction.DESTROYED}`,
records.map((record) => {
return {
userId: authContext.user?.id,