|
|
@@ -11,9 +11,9 @@ module.exports = function(crowi) {
|
|
|
, STATUS_SUSPENDED = 3
|
|
|
, STATUS_DELETED = 4
|
|
|
, STATUS_INVITED = 5
|
|
|
- , USER_PUBLIC_FIELDS = '_id image googleId name username email status createdAt' // TODO: どこか別の場所へ...
|
|
|
+ , USER_PUBLIC_FIELDS = '_id image googleId name username email introduction status createdAt admin' // TODO: どこか別の場所へ...
|
|
|
|
|
|
- , PAGE_ITEMS = 20
|
|
|
+ , PAGE_ITEMS = 50
|
|
|
|
|
|
, userEvent = crowi.event('user')
|
|
|
|
|
|
@@ -326,6 +326,31 @@ module.exports = function(crowi) {
|
|
|
}, { sortBy : sort });
|
|
|
};
|
|
|
|
|
|
+ userSchema.statics.findUsersByPartOfEmail = function(emailPart, options) {
|
|
|
+ const status = options.status || null;
|
|
|
+ const emailPartRegExp = new RegExp(emailPart.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'));
|
|
|
+ const User = this;
|
|
|
+
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ const query = User.find({ email: emailPartRegExp }, USER_PUBLIC_FIELDS);
|
|
|
+
|
|
|
+ if (status) {
|
|
|
+ query.and({status});
|
|
|
+ }
|
|
|
+
|
|
|
+ query
|
|
|
+ .limit(PAGE_ITEMS + 1)
|
|
|
+ .exec((err, userData) => {
|
|
|
+ if (err) {
|
|
|
+ return reject(err);
|
|
|
+ }
|
|
|
+
|
|
|
+ return resolve(userData);
|
|
|
+ });
|
|
|
+ });
|
|
|
+ };
|
|
|
+
|
|
|
+
|
|
|
userSchema.statics.findUserByUsername = function(username) {
|
|
|
var User = this;
|
|
|
return new Promise(function(resolve, reject) {
|
|
|
@@ -573,6 +598,7 @@ module.exports = function(crowi) {
|
|
|
userSchema.statics.STATUS_DELETED = STATUS_DELETED;
|
|
|
userSchema.statics.STATUS_INVITED = STATUS_INVITED;
|
|
|
userSchema.statics.USER_PUBLIC_FIELDS = USER_PUBLIC_FIELDS;
|
|
|
+ userSchema.statics.PAGE_ITEMS = PAGE_ITEMS;
|
|
|
|
|
|
return mongoose.model('User', userSchema);
|
|
|
};
|