From 953069a785f2a6b8d1e11123aab3a09aab1e65ff Mon Sep 17 00:00:00 2001 From: Ariel Gentile Date: Mon, 6 Mar 2023 10:28:30 -0300 Subject: [PATCH] fix(core): repository event when calling deleteById (#1356) Signed-off-by: Ariel Gentile --- packages/core/src/storage/Repository.ts | 9 +++++++- packages/core/src/storage/RepositoryEvents.ts | 2 +- .../src/storage/__tests__/Repository.test.ts | 22 +++++++++++++++++++ 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/packages/core/src/storage/Repository.ts b/packages/core/src/storage/Repository.ts index 30cc980d7a..f2cd0ed671 100644 --- a/packages/core/src/storage/Repository.ts +++ b/packages/core/src/storage/Repository.ts @@ -68,12 +68,19 @@ export class Repository> { } /** - * Delete record by id. Returns null if no record is found + * Delete record by id. Throws {RecordNotFoundError} if no record is found * @param id the id of the record to delete * @returns */ public async deleteById(agentContext: AgentContext, id: string): Promise { await this.storageService.deleteById(agentContext, this.recordClass, id) + + this.eventEmitter.emit>(agentContext, { + type: RepositoryEventTypes.RecordDeleted, + payload: { + record: { id, type: this.recordClass.type }, + }, + }) } /** @inheritDoc {StorageService#getById} */ diff --git a/packages/core/src/storage/RepositoryEvents.ts b/packages/core/src/storage/RepositoryEvents.ts index 3e3b1e2952..ac6524eb01 100644 --- a/packages/core/src/storage/RepositoryEvents.ts +++ b/packages/core/src/storage/RepositoryEvents.ts @@ -27,6 +27,6 @@ export interface RecordUpdatedEvent> extends export interface RecordDeletedEvent> extends BaseEvent { type: typeof RepositoryEventTypes.RecordDeleted payload: { - record: T + record: T | { id: string; type: string } } } diff --git a/packages/core/src/storage/__tests__/Repository.test.ts b/packages/core/src/storage/__tests__/Repository.test.ts index a5ae5fd52f..ae56c636af 100644 --- a/packages/core/src/storage/__tests__/Repository.test.ts +++ b/packages/core/src/storage/__tests__/Repository.test.ts @@ -146,6 +146,28 @@ describe('Repository', () => { expect(storageMock.deleteById).toBeCalledWith(agentContext, TestRecord, 'test-id') }) + + it(`should emit deleted event`, async () => { + const eventListenerMock = jest.fn() + eventEmitter.on>(RepositoryEventTypes.RecordDeleted, eventListenerMock) + + const record = getRecord({ id: 'test-id' }) + + await repository.deleteById(agentContext, record.id) + + expect(eventListenerMock).toHaveBeenCalledWith({ + type: 'RecordDeleted', + metadata: { + contextCorrelationId: 'mock', + }, + payload: { + record: expect.objectContaining({ + id: record.id, + type: record.type, + }), + }, + }) + }) }) describe('getById()', () => {