@@ -18,6 +18,7 @@ import { ServiceSchemaInterface } from './interfaces/service.schema.interface';
1818import { AbstractSchema } from './schemas/abstract.schema' ;
1919import mongodb from 'mongodb' ;
2020import { omit } from 'radash' ;
21+ import { cp } from 'fs' ;
2122
2223@Injectable ( )
2324export abstract class AbstractServiceSchema extends AbstractService implements ServiceSchemaInterface {
@@ -38,9 +39,10 @@ export abstract class AbstractServiceSchema extends AbstractService implements S
3839 options ?: QueryOptions < T > | null | undefined ,
3940 ) : Promise < Query < Array < T > , T , any , T > [ ] > {
4041 if ( this . eventEmitter ) {
42+ const eventName = [ this . moduleName . toLowerCase ( ) , this . serviceName . toLowerCase ( ) , 'service' , 'beforeFind' ] . join ( EventEmitterSeparator )
4143 const beforeEvents = await this . eventEmitter ?. emitAsync (
42- [ this . moduleName . toLowerCase ( ) , this . serviceName . toLowerCase ( ) , 'service' , 'beforeFind' ] . join ( EventEmitterSeparator ) ,
43- { filter, projection, options } ,
44+ eventName ,
45+ { filter, projection, options, eventName } ,
4446 )
4547 for ( const beforeEvent of beforeEvents ) {
4648 if ( beforeEvent ?. stop ) throw beforeEvent ?. stop
@@ -55,9 +57,10 @@ export abstract class AbstractServiceSchema extends AbstractService implements S
5557
5658 public async count < T extends AbstractSchema | Document > ( filter ?: FilterQuery < T > , options ?: ( mongodb . CountOptions & MongooseBaseQueryOptions < T > ) | null ) : Promise < number > {
5759 if ( this . eventEmitter ) {
60+ const eventName = [ this . moduleName . toLowerCase ( ) , this . serviceName . toLowerCase ( ) , 'service' , 'beforeCount' ] . join ( EventEmitterSeparator )
5861 const beforeEvents = await this . eventEmitter ?. emitAsync (
59- [ this . moduleName . toLowerCase ( ) , this . serviceName . toLowerCase ( ) , 'service' , 'beforeCount' ] . join ( EventEmitterSeparator ) ,
60- { filter, options } ,
62+ eventName ,
63+ { filter, options, eventName } ,
6164 )
6265 for ( const beforeEvent of beforeEvents ) {
6366 if ( beforeEvent ?. stop ) throw beforeEvent ?. stop
@@ -85,9 +88,10 @@ export abstract class AbstractServiceSchema extends AbstractService implements S
8588 ) : Promise < [ Array < T & Query < T , T , any , T > > , number ] > {
8689 this . logger . debug ( [ 'findAndCount' , JSON . stringify ( Object . values ( arguments ) ) ] . join ( ' ' ) )
8790 if ( this . eventEmitter ) {
91+ const beforeEventName = [ this . moduleName . toLowerCase ( ) , this . serviceName . toLowerCase ( ) , 'service' , 'beforeFindAndCount' ] . join ( EventEmitterSeparator )
8892 const beforeEvents = await this . eventEmitter ?. emitAsync (
89- [ this . moduleName . toLowerCase ( ) , this . serviceName . toLowerCase ( ) , 'service' , 'beforeFindAndCount' ] . join ( EventEmitterSeparator ) ,
90- { filter, projection, options } ,
93+ beforeEventName ,
94+ { filter, projection, options, eventName : beforeEventName } ,
9195 )
9296 for ( const beforeEvent of beforeEvents ) {
9397 if ( beforeEvent ?. stop ) throw beforeEvent ?. stop
@@ -102,9 +106,10 @@ export abstract class AbstractServiceSchema extends AbstractService implements S
102106 let data = await this . _model . find < T & Query < T , T , any , T > > ( filter , projection , options ) . exec ( )
103107
104108 if ( this . eventEmitter ) {
109+ const eventName = [ this . moduleName . toLowerCase ( ) , this . serviceName . toLowerCase ( ) , 'service' , 'afterFindAndCount' ] . join ( EventEmitterSeparator )
105110 const afterEvents = await this . eventEmitter ?. emitAsync (
106- [ this . moduleName . toLowerCase ( ) , this . serviceName . toLowerCase ( ) , 'service' , 'afterFindAndCount' ] . join ( EventEmitterSeparator ) ,
107- { data, count } ,
111+ eventName ,
112+ { data, count, eventName } ,
108113 )
109114 for ( const afterEvent of afterEvents ) {
110115 if ( afterEvent ?. data ) data = { ...data , ...afterEvent . data }
@@ -123,9 +128,10 @@ export abstract class AbstractServiceSchema extends AbstractService implements S
123128 this . logger . debug ( [ 'findById' , JSON . stringify ( Object . values ( arguments ) ) ] . join ( ' ' ) )
124129
125130 if ( this . eventEmitter ) {
131+ const beforeEventName = [ this . moduleName . toLowerCase ( ) , this . serviceName . toLowerCase ( ) , 'service' , 'beforeFindById' ] . join ( EventEmitterSeparator )
126132 const beforeEvents = await this . eventEmitter ?. emitAsync (
127- [ this . moduleName . toLowerCase ( ) , this . serviceName . toLowerCase ( ) , 'service' , 'beforeFindById' ] . join ( EventEmitterSeparator ) ,
128- { _id, projection, options } ,
133+ beforeEventName ,
134+ { _id, projection, options, eventName : beforeEventName } ,
129135 )
130136 for ( const beforeEvent of beforeEvents ) {
131137 if ( beforeEvent ?. stop ) throw beforeEvent ?. stop
@@ -137,9 +143,10 @@ export abstract class AbstractServiceSchema extends AbstractService implements S
137143 let data = await this . _model . findById < Query < T | null , T , any , T > > ( _id , projection , options ) . exec ( )
138144
139145 if ( this . eventEmitter ) {
146+ const eventName = [ this . moduleName . toLowerCase ( ) , this . serviceName . toLowerCase ( ) , 'service' , 'afterFindById' ] . join ( EventEmitterSeparator )
140147 const afterEvents = await this . eventEmitter ?. emitAsync (
141- [ this . moduleName . toLowerCase ( ) , this . serviceName . toLowerCase ( ) , 'service' , 'afterFindById' ] . join ( EventEmitterSeparator ) ,
142- { data } ,
148+ eventName ,
149+ { data, eventName } ,
143150 )
144151 for ( const afterEvent of afterEvents ) {
145152 if ( afterEvent ?. data ) data = { ...data , ...afterEvent . data }
@@ -160,9 +167,10 @@ export abstract class AbstractServiceSchema extends AbstractService implements S
160167 ) : Promise < Query < T , T , any , T > > {
161168 this . logger . debug ( [ 'findOne' , JSON . stringify ( Object . values ( arguments ) ) ] . join ( ' ' ) )
162169 if ( this . eventEmitter ) {
170+ const beforeEventName = [ this . moduleName . toLowerCase ( ) , this . serviceName . toLowerCase ( ) , 'service' , 'beforeFindOne' ] . join ( EventEmitterSeparator )
163171 const beforeEvents = await this . eventEmitter ?. emitAsync (
164- [ this . moduleName . toLowerCase ( ) , this . serviceName . toLowerCase ( ) , 'service' , 'beforeFindOne' ] . join ( EventEmitterSeparator ) ,
165- { filter, projection, options } ,
172+ beforeEventName ,
173+ { filter, projection, options, eventName : beforeEventName } ,
166174 )
167175 for ( const beforeEvent of beforeEvents ) {
168176 if ( beforeEvent ?. stop ) throw beforeEvent ?. stop
@@ -177,9 +185,10 @@ export abstract class AbstractServiceSchema extends AbstractService implements S
177185 throw new NotFoundException ( )
178186 }
179187 if ( this . eventEmitter ) {
188+ const eventName = [ this . moduleName . toLowerCase ( ) , this . serviceName . toLowerCase ( ) , 'service' , 'afterFindOne' ] . join ( EventEmitterSeparator )
180189 const afterEvents = await this . eventEmitter ?. emitAsync (
181- [ this . moduleName . toLowerCase ( ) , this . serviceName . toLowerCase ( ) , 'service' , 'afterFindOne' ] . join ( EventEmitterSeparator ) ,
182- { data } ,
190+ eventName ,
191+ { data, eventName } ,
183192 )
184193 for ( const afterEvent of afterEvents ) {
185194 if ( afterEvent ?. data ) data = { ...data , ...afterEvent . data }
@@ -198,9 +207,10 @@ export abstract class AbstractServiceSchema extends AbstractService implements S
198207 } )
199208 this . logger . debug ( [ 'create' , JSON . stringify ( logInfos ) ] . join ( ' ' ) )
200209 if ( this . eventEmitter ) {
210+ const beforeEventName = [ this . moduleName . toLowerCase ( ) , this . serviceName . toLowerCase ( ) , 'service' , 'beforeCreate' ] . join ( EventEmitterSeparator )
201211 const beforeEvents = await this . eventEmitter ?. emitAsync (
202- [ this . moduleName . toLowerCase ( ) , this . serviceName . toLowerCase ( ) , 'service' , 'beforeCreate' ] . join ( EventEmitterSeparator ) ,
203- { data, options } ,
212+ beforeEventName ,
213+ { data, options, eventName : beforeEventName } ,
204214 )
205215 for ( const beforeEvent of beforeEvents ) {
206216 if ( beforeEvent ?. stop ) throw beforeEvent ?. stop
@@ -219,9 +229,10 @@ export abstract class AbstractServiceSchema extends AbstractService implements S
219229 } )
220230 let created = document . save ( options )
221231 if ( this . eventEmitter ) {
232+ const eventName = [ this . moduleName . toLowerCase ( ) , this . serviceName . toLowerCase ( ) , 'service' , 'afterCreate' ] . join ( EventEmitterSeparator )
222233 const afterEvents = await this . eventEmitter ?. emitAsync (
223- [ this . moduleName . toLowerCase ( ) , this . serviceName . toLowerCase ( ) , 'service' , 'afterCreate' ] . join ( EventEmitterSeparator ) ,
224- { created } ,
234+ eventName ,
235+ { created, eventName } ,
225236 )
226237 for ( const afterEvent of afterEvents ) {
227238 if ( afterEvent ?. created ) created = { ...created , ...afterEvent . created }
@@ -244,9 +255,10 @@ export abstract class AbstractServiceSchema extends AbstractService implements S
244255 } )
245256 this . logger . debug ( [ 'update' , JSON . stringify ( logInfos ) ] . join ( ' ' ) )
246257 if ( this . eventEmitter ) {
258+ const beforeEventName = [ this . moduleName . toLowerCase ( ) , this . serviceName . toLowerCase ( ) , 'service' , 'beforeUpdate' ] . join ( EventEmitterSeparator )
247259 const beforeEvents = await this . eventEmitter ?. emitAsync (
248- [ this . moduleName . toLowerCase ( ) , this . serviceName . toLowerCase ( ) , 'service' , 'beforeUpdate' ] . join ( EventEmitterSeparator ) ,
249- { _id, update, options } ,
260+ beforeEventName ,
261+ { _id, update, options, eventName : beforeEventName } ,
250262 )
251263 for ( const beforeEvent of beforeEvents ) {
252264 if ( beforeEvent ?. stop ) throw beforeEvent ?. stop
@@ -282,9 +294,10 @@ export abstract class AbstractServiceSchema extends AbstractService implements S
282294 throw new NotFoundException ( )
283295 }
284296 if ( this . eventEmitter ) {
297+ const eventName = [ this . moduleName . toLowerCase ( ) , this . serviceName . toLowerCase ( ) , 'service' , 'afterUpdate' ] . join ( EventEmitterSeparator )
285298 const afterEvents = await this . eventEmitter ?. emitAsync (
286- [ this . moduleName . toLowerCase ( ) , this . serviceName . toLowerCase ( ) , 'service' , 'afterUpdate' ] . join ( EventEmitterSeparator ) ,
287- { before, updated } ,
299+ eventName ,
300+ { before, updated, eventName } ,
288301 )
289302 for ( const afterEvent of afterEvents ) {
290303 if ( afterEvent ?. updated ) updated = { ...updated , ...afterEvent . updated }
@@ -300,9 +313,10 @@ export abstract class AbstractServiceSchema extends AbstractService implements S
300313 ) : Promise < ModifyResult < Query < T , T , any , T > > > {
301314 this . logger . debug ( [ 'upsert' , JSON . stringify ( Object . values ( arguments ) ) ] . join ( ' ' ) ) ;
302315 if ( this . eventEmitter ) {
316+ const beforeEventName = [ this . moduleName . toLowerCase ( ) , this . serviceName . toLowerCase ( ) , 'service' , 'beforeUpsert' ] . join ( EventEmitterSeparator ) ;
303317 const beforeEvents = await this . eventEmitter ?. emitAsync (
304- [ this . moduleName . toLowerCase ( ) , this . serviceName . toLowerCase ( ) , 'service' , 'beforeUpsert' ] . join ( EventEmitterSeparator ) ,
305- { filter, update, options } ,
318+ beforeEventName ,
319+ { filter, update, options, eventName : beforeEventName } ,
306320 ) ;
307321 for ( const beforeEvent of beforeEvents ) {
308322 if ( beforeEvent ?. stop ) throw beforeEvent ?. stop ;
@@ -338,9 +352,10 @@ export abstract class AbstractServiceSchema extends AbstractService implements S
338352 . exec ( ) ;
339353
340354 if ( this . eventEmitter ) {
355+ const eventName = [ this . moduleName . toLowerCase ( ) , this . serviceName . toLowerCase ( ) , 'service' , 'afterUpsert' ] . join ( EventEmitterSeparator )
341356 const afterEvents = await this . eventEmitter ?. emitAsync (
342- [ this . moduleName . toLowerCase ( ) , this . serviceName . toLowerCase ( ) , 'service' , 'afterUpsert' ] . join ( EventEmitterSeparator ) ,
343- { result, before } ,
357+ eventName ,
358+ { result, before, eventName } ,
344359 ) ;
345360 for ( const afterEvent of afterEvents ) {
346361 if ( afterEvent ?. result ) result = { ...result , ...afterEvent . result } ;
@@ -358,9 +373,10 @@ export abstract class AbstractServiceSchema extends AbstractService implements S
358373 public async delete < T extends AbstractSchema | Document > ( _id : Types . ObjectId | any , options ?: QueryOptions < T > | null | undefined ) : Promise < Query < T , T , any , T > > {
359374 this . logger . debug ( [ 'delete' , JSON . stringify ( Object . values ( arguments ) ) ] . join ( ' ' ) )
360375 if ( this . eventEmitter ) {
376+ const beforeEventName = [ this . moduleName . toLowerCase ( ) , this . serviceName . toLowerCase ( ) , 'service' , 'beforeDelete' ] . join ( EventEmitterSeparator )
361377 const beforeEvents = await this . eventEmitter ?. emitAsync (
362- [ this . moduleName . toLowerCase ( ) , this . serviceName . toLowerCase ( ) , 'service' , 'beforeDelete' ] . join ( EventEmitterSeparator ) ,
363- { _id, options } ,
378+ beforeEventName ,
379+ { _id, options, eventName : beforeEventName } ,
364380 )
365381 for ( const beforeEvent of beforeEvents ) {
366382 if ( beforeEvent ?. stop ) throw beforeEvent ?. stop
@@ -374,9 +390,10 @@ export abstract class AbstractServiceSchema extends AbstractService implements S
374390 throw new NotFoundException ( )
375391 }
376392 if ( this . eventEmitter ) {
393+ const eventName = [ this . moduleName . toLowerCase ( ) , this . serviceName . toLowerCase ( ) , 'service' , 'afterDelete' ] . join ( EventEmitterSeparator )
377394 const afterEvents = await this . eventEmitter ?. emitAsync (
378- [ this . moduleName . toLowerCase ( ) , this . serviceName . toLowerCase ( ) , 'service' , 'afterDelete' ] . join ( EventEmitterSeparator ) ,
379- { before, deleted } ,
395+ eventName ,
396+ { before, deleted, eventName } ,
380397 )
381398 for ( const afterEvent of afterEvents ) {
382399 if ( afterEvent ?. deleted ) deleted = { ...deleted , ...afterEvent . deleted }
0 commit comments