user-group-relation.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. module.exports = function(crowi) {
  2. var debug = require('debug')('crowi:models:userGroupRelation')
  3. , mongoose = require('mongoose')
  4. , mongoosePaginate = require('mongoose-paginate')
  5. , ObjectId = mongoose.Schema.Types.ObjectId
  6. , PAGE_ITEMS = 50
  7. , userGroupRelationSchema;
  8. userGroupRelationSchema = new mongoose.Schema({
  9. relatedGroup: { type: ObjectId, ref: 'UserGroup' },
  10. relatedUser: { type: ObjectId, ref: 'User' },
  11. createdAt: { type: Date, default: Date.now },
  12. });
  13. userGroupRelationSchema.plugin(mongoosePaginate);
  14. // すべてのグループ所属関係を取得
  15. userGroupRelationSchema.statics.findAllRelation = function() {
  16. debug('findAllGroups is called');
  17. var UserGroupRelation = this;
  18. return new Promise(function(resolve, reject) {
  19. UserGroupRelation
  20. .find({ relatedGroup: group} )
  21. .exec(function (err, userGroupRelationData) {
  22. if (err) {
  23. return reject(err);
  24. }
  25. return resolve(userGroupRelationData);
  26. });
  27. });
  28. };
  29. // すべてのグループ所属関係を取得
  30. userGroupRelationSchema.statics.findAllRelation = function (group) {
  31. debug('findAllGroups is called');
  32. var UserGroupRelation = this;
  33. return new Promise(function (resolve, reject) {
  34. UserGroupRelation
  35. .find({ relatedGroup: group })
  36. .exec(function (err, userGroupRelationData) {
  37. if (err) {
  38. return reject(err);
  39. }
  40. return resolve(userGroupRelationData);
  41. });
  42. });
  43. };
  44. // ページネーション利用の検索
  45. userGroupRelationSchema.statics.findUserGroupRelationsWithPagination = function(options, callback) {
  46. this.paginate({}, { page: options.page || 1, limit: options.limit || PAGE_ITEMS }, function(err, result) {
  47. if (err) {
  48. debug('Error on pagination:', err);
  49. return callback(err, null);
  50. }
  51. return callback(err, result);
  52. });
  53. };
  54. // 関係性の生成
  55. userGroupRelationSchema.statics.createRelation = function(userGroup, user, callback) {
  56. var UserGroupRelation = this
  57. , newUserGroupRelation = new UserGroupRelation();
  58. newUserGroupRelation.relatedGroup = group;
  59. newUserGroupRelation.relatedUser = user;
  60. newUserGroupRelation.createdAt = Date.now();
  61. newUserGroupRelation.save(function(err, userGroupRelationData) {
  62. return callback(err, userGroupRelationData);
  63. });
  64. };
  65. // グループに紐づく関係性の全削除
  66. userGroupRelationSchema.statics.removeAllCompletelyByUserGroup = function (userGroup, callback) {
  67. if (userGroup === null || userGroup === undefined) { return; }
  68. var UserGroupRelation = this
  69. var relations = this.findAllRelation(userGroup);
  70. // TODO 関係性削除の実装
  71. relations.array.forEach(element => {
  72. });
  73. }
  74. //
  75. userGroupRelationSchema.statics.removeCompletely = function (userGroupRelation, callback) {
  76. if (userGroupRelation) { return; }
  77. var UserGroupRelation = this
  78. }
  79. userGroupRelationSchema.statics.PAGE_ITEMS = PAGE_ITEMS;
  80. return mongoose.model('UserGroupRelation', userGroupRelationSchema);
  81. };