@@ -199,37 +199,38 @@ userSchema.methods.findMatchingKey = function findMatchingKey(
199
199
* @callback [cb] - Optional error-first callback that passes User document
200
200
* @return {Promise<Object> } - Returns Promise fulfilled by User document
201
201
*/
202
- userSchema . statics . findByEmail = function findByEmail ( email , cb ) {
203
- let query ;
204
- if ( Array . isArray ( email ) ) {
205
- query = {
206
- email : { $in : email }
207
- } ;
208
- } else {
209
- query = {
210
- email
211
- } ;
212
- }
202
+ userSchema . statics . findByEmail = async function findByEmail ( email ) {
203
+ const user = this ;
204
+ const query = Array . isArray ( email ) ? { email : { $in : email } } : { email } ;
205
+
213
206
// Email addresses should be case-insensitive unique
214
207
// In MongoDB, you must use collation in order to do a case-insensitive query
215
- return this . findOne ( query ) . collation ( { locale : 'en' , strength : 2 } ) . exec ( cb ) ;
208
+ const userFoundByEmail = await user
209
+ . findOne ( query )
210
+ . collation ( { locale : 'en' , strength : 2 } )
211
+ . exec ( ) ;
212
+ return userFoundByEmail ;
216
213
} ;
217
214
218
215
/**
219
216
*
220
217
* Queries User collection by emails and returns all Users that match.
221
218
*
222
219
* @param {string[] } emails - Array of email strings
223
- * @callback [cb] - Optional error-first callback that passes User document
224
220
* @return {Promise<Object> } - Returns Promise fulfilled by User document
225
221
*/
226
- userSchema . statics . findAllByEmails = function findAllByEmails ( emails , cb ) {
222
+ userSchema . statics . findAllByEmails = async function findAllByEmails ( emails ) {
223
+ const user = this ;
227
224
const query = {
228
225
email : { $in : emails }
229
226
} ;
230
227
// Email addresses should be case-insensitive unique
231
228
// In MongoDB, you must use collation in order to do a case-insensitive query
232
- return this . find ( query ) . collation ( { locale : 'en' , strength : 2 } ) . exec ( cb ) ;
229
+ const usersFoundByEmails = await user
230
+ . find ( query )
231
+ . collation ( { locale : 'en' , strength : 2 } )
232
+ . exec ( ) ;
233
+ return usersFoundByEmails ;
233
234
} ;
234
235
235
236
/**
@@ -239,29 +240,31 @@ userSchema.statics.findAllByEmails = function findAllByEmails(emails, cb) {
239
240
* @param {string } username - Username string
240
241
* @param {Object } [options] - Optional options
241
242
* @param {boolean } options.caseInsensitive - Does a caseInsensitive query, defaults to false
242
- * @callback [cb] - Optional error-first callback that passes User document
243
243
* @return {Promise<Object> } - Returns Promise fulfilled by User document
244
244
*/
245
- userSchema . statics . findByUsername = function findByUsername (
245
+ userSchema . statics . findByUsername = async function findByUsername (
246
246
username ,
247
- options ,
248
- cb
247
+ options
249
248
) {
249
+ const user = this ;
250
250
const query = {
251
251
username
252
252
} ;
253
+
253
254
if (
254
- ( arguments . length === 3 && options . caseInsensitive ) ||
255
- ( arguments . length === 2 &&
256
- typeof options === 'object' &&
257
- options . caseInsensitive )
255
+ arguments . length === 2 &&
256
+ typeof options === 'object' &&
257
+ options . caseInsensitive
258
258
) {
259
- return this . findOne ( query )
259
+ const foundUser = await user
260
+ . findOne ( query )
260
261
. collation ( { locale : 'en' , strength : 2 } )
261
- . exec ( cb ) ;
262
+ . exec ( ) ;
263
+ return foundUser ;
262
264
}
263
- const callback = typeof options === 'function' ? options : cb ;
264
- return this . findOne ( query , callback ) ;
265
+
266
+ const userFoundByUsername = await user . findOne ( query ) . exec ( ) ;
267
+ return userFoundByUsername ;
265
268
} ;
266
269
267
270
/**
@@ -276,37 +279,39 @@ userSchema.statics.findByUsername = function findByUsername(
276
279
* default query for username or email, defaults
277
280
* to false
278
281
* @param {("email"|"username") } options.valueType - Prevents automatic type inferrence
279
- * @callback [cb] - Optional error-first callback that passes User document
280
282
* @return {Promise<Object> } - Returns Promise fulfilled by User document
281
283
*/
282
- userSchema . statics . findByEmailOrUsername = function findByEmailOrUsername (
284
+ userSchema . statics . findByEmailOrUsername = async function findByEmailOrUsername (
283
285
value ,
284
- options ,
285
- cb
286
+ options
286
287
) {
287
- let isEmail ;
288
- if ( options && options . valueType ) {
289
- isEmail = options . valueType === 'email' ;
290
- } else {
291
- isEmail = value . indexOf ( '@' ) > - 1 ;
292
- }
288
+ const user = this ;
289
+ const isEmail =
290
+ options && options . valueType
291
+ ? options . valueType === 'email'
292
+ : value . indexOf ( '@' ) > - 1 ;
293
+
293
294
// do the case insensitive stuff
294
295
if (
295
- ( arguments . length === 3 && options . caseInsensitive ) ||
296
- ( arguments . length === 2 &&
297
- typeof options === 'object' &&
298
- options . caseInsensitive )
296
+ arguments . length === 2 &&
297
+ typeof options === 'object' &&
298
+ options . caseInsensitive
299
299
) {
300
300
const query = isEmail ? { email : value } : { username : value } ;
301
- return this . findOne ( query )
301
+ const foundUser = await user
302
+ . findOne ( query )
302
303
. collation ( { locale : 'en' , strength : 2 } )
303
- . exec ( cb ) ;
304
+ . exec ( ) ;
305
+
306
+ return foundUser ;
304
307
}
305
- const callback = typeof options === 'function' ? options : cb ;
308
+
306
309
if ( isEmail ) {
307
- return this . findByEmail ( value , callback ) ;
310
+ const userFoundByEmail = await user . findByEmail ( value ) ;
311
+ return userFoundByEmail ;
308
312
}
309
- return this . findByUsername ( value , callback ) ;
313
+ const userFoundByUsername = await user . findByUsername ( value ) ;
314
+ return userFoundByUsername ;
310
315
} ;
311
316
312
317
/**
0 commit comments