Skip to content

Commit 007678d

Browse files
committed
feat: refactor DatabaseDriver to extend DatabaseDriverPersister and update TransactionalEventEmitter to use custom persister
1 parent 4d8eb32 commit 007678d

File tree

3 files changed

+22
-37
lines changed

3 files changed

+22
-37
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
export interface DatabaseDriverPersister {
2+
3+
persist<T>(entity: T): void;
4+
5+
remove<T>(entity: T): void;
6+
7+
flush(): Promise<void>;
8+
}
+2-8
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,7 @@
11
import { InboxOutboxTransportEvent } from '../model/inbox-outbox-transport-event.interface';
2+
import { DatabaseDriverPersister } from './database.driver-persister';
23

3-
export interface DatabaseDriver {
4+
export interface DatabaseDriver extends DatabaseDriverPersister {
45
createInboxOutboxTransportEvent(eventName: string, eventPayload: any, expireAt: number, readyToRetryAfter: number | null): InboxOutboxTransportEvent;
5-
66
findAndExtendReadyToRetryEvents(limit: number): Promise<InboxOutboxTransportEvent[]>;
7-
8-
persist<T>(entity: T): void;
9-
10-
remove<T>(entity: T): void;
11-
12-
flush(): Promise<void>;
137
}

packages/core/src/emitter/transactional-event-emitter.ts

+12-29
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { ListenerDuplicateNameException } from '../listener/exception/listener-d
77
import { INBOX_OUTBOX_EVENT_PROCESSOR_TOKEN, InboxOutboxEventProcessorContract } from '../processor/inbox-outbox-event-processor.contract';
88
import { EVENT_CONFIGURATION_RESOLVER_TOKEN, EventConfigurationResolverContract } from '../resolver/event-configuration-resolver.contract';
99
import { InboxOutboxEvent } from './contract/inbox-outbox-event.interface';
10+
import { DatabaseDriverPersister } from '../driver/database.driver-persister';
1011

1112
export enum TransactionalEventEmitterOperations {
1213
persist = 'persist',
@@ -30,50 +31,32 @@ export class TransactionalEventEmitter {
3031
operation: TransactionalEventEmitterOperations;
3132
entity: any;
3233
}[],
33-
): Promise<void>;
34-
async emit(
35-
event: InboxOutboxEvent,
36-
entities: {
37-
operation: TransactionalEventEmitterOperations;
38-
entity: any;
39-
}[],
40-
databaseDriver: DatabaseDriver,
41-
): Promise<void>;
42-
43-
async emit(
44-
event: InboxOutboxEvent,
45-
entities: {
46-
operation: TransactionalEventEmitterOperations;
47-
entity: any;
48-
}[],
49-
databaseDriver?: DatabaseDriver,
34+
customDatabaseDriverPersister?: DatabaseDriverPersister,
5035
): Promise<void> {
5136
const eventOptions: InboxOutboxModuleEventOptions = this.options.events.find((optionEvent) => optionEvent.name === event.name);
5237

5338
if (!eventOptions) {
5439
throw new Error(`Event ${event.name} is not configured. Did you forget to add it to the module options?`);
5540
}
5641

57-
if (!databaseDriver) {
58-
databaseDriver = this.databaseDriverFactory.create(this.eventConfigurationResolver);
59-
}
42+
const databaseDriver = this.databaseDriverFactory.create(this.eventConfigurationResolver);
6043
const currentTimestamp = new Date().getTime();
6144

62-
const inboxOutboxTransportEvent = this.databaseDriverFactory
63-
.create(this.eventConfigurationResolver)
64-
.createInboxOutboxTransportEvent(event.name, event, currentTimestamp + eventOptions.listeners.expiresAtTTL, currentTimestamp + eventOptions.listeners.readyToRetryAfterTTL);
45+
const inboxOutboxTransportEvent = databaseDriver.createInboxOutboxTransportEvent(event.name, event, currentTimestamp + eventOptions.listeners.expiresAtTTL, currentTimestamp + eventOptions.listeners.readyToRetryAfterTTL);
46+
47+
const persister = customDatabaseDriverPersister || databaseDriver;
6548

6649
entities.forEach((entity) => {
67-
if (entity.operation === 'persist') {
68-
databaseDriver.persist(entity.entity);
50+
if (entity.operation === TransactionalEventEmitterOperations.persist) {
51+
persister.persist(entity.entity);
6952
}
70-
if (entity.operation === 'remove') {
71-
databaseDriver.remove(entity.entity);
53+
if (entity.operation === TransactionalEventEmitterOperations.remove) {
54+
persister.remove(entity.entity);
7255
}
7356
});
7457

75-
databaseDriver.persist(inboxOutboxTransportEvent);
76-
await databaseDriver.flush();
58+
persister.persist(inboxOutboxTransportEvent);
59+
await persister.flush();
7760

7861
this.inboxOutboxEventProcessor.process(eventOptions, inboxOutboxTransportEvent, this.getListeners(event.name));
7962
}

0 commit comments

Comments
 (0)