1
1
import { Inject , Injectable } from '@nestjs/common' ;
2
2
import { DATABASE_DRIVER_FACTORY_TOKEN , DatabaseDriverFactory } from '../driver/database-driver.factory' ;
3
+ import { DatabaseDriver } from '../driver/database.driver' ;
3
4
import { InboxOutboxModuleEventOptions , InboxOutboxModuleOptions , MODULE_OPTIONS_TOKEN } from '../inbox-outbox.module-definition' ;
4
5
import { IListener } from '../listener/contract/listener.interface' ;
5
6
import { ListenerDuplicateNameException } from '../listener/exception/listener-duplicate-name.exception' ;
@@ -21,30 +22,46 @@ export class TransactionalEventEmitter {
21
22
@Inject ( DATABASE_DRIVER_FACTORY_TOKEN ) private databaseDriverFactory : DatabaseDriverFactory ,
22
23
@Inject ( INBOX_OUTBOX_EVENT_PROCESSOR_TOKEN ) private inboxOutboxEventProcessor : InboxOutboxEventProcessorContract ,
23
24
@Inject ( EVENT_CONFIGURATION_RESOLVER_TOKEN ) private eventConfigurationResolver : EventConfigurationResolverContract ,
24
- ) { }
25
+ ) { }
25
26
26
27
async emit (
27
28
event : InboxOutboxEvent ,
28
29
entities : {
29
30
operation : TransactionalEventEmitterOperations ;
30
31
entity : any ;
31
32
} [ ] ,
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 ,
32
50
) : Promise < void > {
33
51
const eventOptions : InboxOutboxModuleEventOptions = this . options . events . find ( ( optionEvent ) => optionEvent . name === event . name ) ;
34
52
35
53
if ( ! eventOptions ) {
36
54
throw new Error ( `Event ${ event . name } is not configured. Did you forget to add it to the module options?` ) ;
37
55
}
38
56
39
- const databaseDriver = this . databaseDriverFactory . create ( this . eventConfigurationResolver ) ;
57
+ if ( ! databaseDriver ) {
58
+ databaseDriver = this . databaseDriverFactory . create ( this . eventConfigurationResolver ) ;
59
+ }
40
60
const currentTimestamp = new Date ( ) . getTime ( ) ;
41
61
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 ) ;
48
65
49
66
entities . forEach ( ( entity ) => {
50
67
if ( entity . operation === 'persist' ) {
0 commit comments