11import { Model , PipelineStage , PopulateOptions , Types } from 'mongoose' ;
22import {
33 IDatabaseCreateOptions ,
4+ IDatabaseExistOptions ,
45 IDatabaseFindAllOptions ,
56 IDatabaseFindOneOptions ,
67 IDatabaseOptions ,
@@ -53,6 +54,10 @@ export abstract class DatabaseMongoRepositoryAbstract<T>
5354 }
5455 }
5556
57+ if ( options && options . session ) {
58+ findAll . session ( options . session ) ;
59+ }
60+
5661 return findAll . lean ( ) ;
5762 }
5863
@@ -76,6 +81,10 @@ export abstract class DatabaseMongoRepositoryAbstract<T>
7681 }
7782 }
7883
84+ if ( options && options . session ) {
85+ findOne . session ( options . session ) ;
86+ }
87+
7988 return findOne . lean ( ) ;
8089 }
8190
@@ -99,27 +108,61 @@ export abstract class DatabaseMongoRepositoryAbstract<T>
99108 }
100109 }
101110
111+ if ( options && options . session ) {
112+ findOne . session ( options . session ) ;
113+ }
114+
102115 return findOne . lean ( ) ;
103116 }
104117
105- async getTotal ( find ?: Record < string , any > ) : Promise < number > {
106- return this . _repository . countDocuments ( find ) ;
118+ async getTotal (
119+ find ?: Record < string , any > ,
120+ options ?: IDatabaseOptions
121+ ) : Promise < number > {
122+ const count = this . _repository . countDocuments ( find ) ;
123+
124+ if ( options && options . session ) {
125+ count . session ( options . session ) ;
126+ }
127+
128+ return count ;
107129 }
108130
109131 async exists (
110132 find : Record < string , any > ,
111- excludeId ?: string
133+ options ?: IDatabaseExistOptions
112134 ) : Promise < boolean > {
113- const exist = await this . _repository . exists ( {
135+ const exist = this . _repository . exists ( {
114136 ...find ,
115- _id : { $nin : new Types . ObjectId ( excludeId ) } ,
137+ _id : {
138+ $nin : new Types . ObjectId (
139+ options && options . excludeId ? options . excludeId : undefined
140+ ) ,
141+ } ,
116142 } ) ;
117143
118- return exist ? true : false ;
144+ if ( options && options . session ) {
145+ exist . session ( options . session ) ;
146+ }
147+
148+ const result = await exist ;
149+
150+ return result ? true : false ;
119151 }
120152
121- async aggregate < N > ( pipeline : Record < string , any > [ ] ) : Promise < N [ ] > {
122- return this . _repository . aggregate < N > ( pipeline as PipelineStage [ ] ) ;
153+ async aggregate < N > (
154+ pipeline : Record < string , any > [ ] ,
155+ options ?: IDatabaseOptions
156+ ) : Promise < N [ ] > {
157+ const aggregate = this . _repository . aggregate < N > (
158+ pipeline as PipelineStage [ ]
159+ ) ;
160+
161+ if ( options && options . session ) {
162+ aggregate . session ( options . session ) ;
163+ }
164+
165+ return aggregate ;
123166 }
124167
125168 async create < N > ( data : N , options ?: IDatabaseCreateOptions ) : Promise < T > {
0 commit comments