|
|
@@ -40,6 +40,27 @@ class UserGroupRelation {
|
|
|
return this._crowi;
|
|
|
}
|
|
|
|
|
|
+ static init() {
|
|
|
+ this.removeAllInvalidRelations();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * remove all invalid relations that has reference to unlinked document
|
|
|
+ */
|
|
|
+ static removeAllInvalidRelations() {
|
|
|
+ return this.findAllRelation()
|
|
|
+ .then(relations => {
|
|
|
+ // filter invalid documents
|
|
|
+ return relations.filter(relation => {
|
|
|
+ return relation.relatedUser == null || relation.relatedGroup == null;
|
|
|
+ });
|
|
|
+ })
|
|
|
+ .then(invalidRelations => {
|
|
|
+ const ids = invalidRelations.map(relation => relation._id);
|
|
|
+ return this.deleteMany({ _id: { $in: ids }});
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* find all user and group relation
|
|
|
*
|
|
|
@@ -99,7 +120,12 @@ class UserGroupRelation {
|
|
|
return this
|
|
|
.find({ relatedUser: user.id })
|
|
|
.populate('relatedGroup')
|
|
|
- .exec();
|
|
|
+ // filter documents only relatedGroup is not null
|
|
|
+ .then(userGroupRelations => {
|
|
|
+ return userGroupRelations.filter(relation => {
|
|
|
+ return relation.relatedGroup != null;
|
|
|
+ });
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -223,18 +249,7 @@ class UserGroupRelation {
|
|
|
* @memberof UserGroupRelation
|
|
|
*/
|
|
|
static removeAllByUserGroup(userGroup) {
|
|
|
-
|
|
|
- return this.findAllRelationForUserGroup(userGroup)
|
|
|
- .then((relations) => {
|
|
|
- if (relations == null) {
|
|
|
- return;
|
|
|
- }
|
|
|
- else {
|
|
|
- relations.map((relation) => {
|
|
|
- relation.remove();
|
|
|
- });
|
|
|
- }
|
|
|
- });
|
|
|
+ return this.deleteMany({ relatedGroup: userGroup });
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -263,5 +278,7 @@ class UserGroupRelation {
|
|
|
module.exports = function(crowi) {
|
|
|
UserGroupRelation.crowi = crowi;
|
|
|
schema.loadClass(UserGroupRelation);
|
|
|
- return mongoose.model('UserGroupRelation', schema);
|
|
|
+ const model = mongoose.model('UserGroupRelation', schema);
|
|
|
+ model.init();
|
|
|
+ return model;
|
|
|
};
|