11import { Inject , Injectable } from '@nestjs/common' ;
22import { DATABASE_DRIVER_FACTORY_TOKEN , DatabaseDriverFactory } from '../driver/database-driver.factory' ;
3+ import { DatabaseDriver } from '../driver/database.driver' ;
34import { InboxOutboxModuleEventOptions , InboxOutboxModuleOptions , MODULE_OPTIONS_TOKEN } from '../inbox-outbox.module-definition' ;
45import { IListener } from '../listener/contract/listener.interface' ;
56import { 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