@@ -7,6 +7,7 @@ import { ListenerDuplicateNameException } from '../listener/exception/listener-d
77import { INBOX_OUTBOX_EVENT_PROCESSOR_TOKEN , InboxOutboxEventProcessorContract } from '../processor/inbox-outbox-event-processor.contract' ;
88import { EVENT_CONFIGURATION_RESOLVER_TOKEN , EventConfigurationResolverContract } from '../resolver/event-configuration-resolver.contract' ;
99import { InboxOutboxEvent } from './contract/inbox-outbox-event.interface' ;
10+ import { DatabaseDriverPersister } from '../driver/database.driver-persister' ;
1011
1112export 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