Skip to content

Commit cbe15b1

Browse files
committed
feat implemented
1 parent e87bfc0 commit cbe15b1

File tree

2 files changed

+27
-11
lines changed

2 files changed

+27
-11
lines changed
Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
import { InboxOutboxTransportEvent } from '../model/inbox-outbox-transport-event.interface';
22

3-
43
export interface DatabaseDriver {
54
createInboxOutboxTransportEvent(eventName: string, eventPayload: any, expireAt: number, readyToRetryAfter: number | null): InboxOutboxTransportEvent;
65

76
findAndExtendReadyToRetryEvents(limit: number): Promise<InboxOutboxTransportEvent[]>;
87

9-
persist<T>(entity: T): Promise<void>;
8+
persist<T>(entity: T): void;
109

11-
remove<T>(entity: T): Promise<void>;
10+
remove<T>(entity: T): void;
1211

1312
flush(): Promise<void>;
1413
}

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

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { Inject, Injectable } from '@nestjs/common';
22
import { DATABASE_DRIVER_FACTORY_TOKEN, DatabaseDriverFactory } from '../driver/database-driver.factory';
3+
import { DatabaseDriver } from '../driver/database.driver';
34
import { InboxOutboxModuleEventOptions, InboxOutboxModuleOptions, MODULE_OPTIONS_TOKEN } from '../inbox-outbox.module-definition';
45
import { IListener } from '../listener/contract/listener.interface';
56
import { ListenerDuplicateNameException } from '../listener/exception/listener-duplicate-name.exception';
@@ -21,30 +22,46 @@ export class TransactionalEventEmitter {
2122
@Inject(DATABASE_DRIVER_FACTORY_TOKEN) private databaseDriverFactory: DatabaseDriverFactory,
2223
@Inject(INBOX_OUTBOX_EVENT_PROCESSOR_TOKEN) private inboxOutboxEventProcessor: InboxOutboxEventProcessorContract,
2324
@Inject(EVENT_CONFIGURATION_RESOLVER_TOKEN) private eventConfigurationResolver: EventConfigurationResolverContract,
24-
) {}
25+
) {}
2526

2627
async emit(
2728
event: InboxOutboxEvent,
2829
entities: {
2930
operation: TransactionalEventEmitterOperations;
3031
entity: any;
3132
}[],
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,
3250
): Promise<void> {
3351
const eventOptions: InboxOutboxModuleEventOptions = this.options.events.find((optionEvent) => optionEvent.name === event.name);
3452

3553
if (!eventOptions) {
3654
throw new Error(`Event ${event.name} is not configured. Did you forget to add it to the module options?`);
3755
}
3856

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

42-
const inboxOutboxTransportEvent = databaseDriver.createInboxOutboxTransportEvent(
43-
event.name,
44-
event,
45-
currentTimestamp + eventOptions.listeners.expiresAtTTL,
46-
currentTimestamp + eventOptions.listeners.readyToRetryAfterTTL,
47-
);
62+
const inboxOutboxTransportEvent = this.databaseDriverFactory
63+
.create(this.eventConfigurationResolver)
64+
.createInboxOutboxTransportEvent(event.name, event, currentTimestamp + eventOptions.listeners.expiresAtTTL, currentTimestamp + eventOptions.listeners.readyToRetryAfterTTL);
4865

4966
entities.forEach((entity) => {
5067
if (entity.operation === 'persist') {

0 commit comments

Comments
 (0)