userGroupRelation.js 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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. userGroupRelationSchema.plugin(uniqueValidator);
  15. // すべてのグループ所属関係を取得
  16. userGroupRelationSchema.statics.findAllRelation = function() {
  17. debug('findAllGroups is called');
  18. var UserGroupRelation = this;
  19. return new Promise(function(resolve, reject) {
  20. UserGroupRelation
  21. .find({ relatedGroup: group} )
  22. .exec(function (err, userGroupRelationData) {
  23. if (err) {
  24. return reject(err);
  25. }
  26. return resolve(userGroupRelationData);
  27. });
  28. });
  29. };
  30. // すべてのグループ所属関係を取得
  31. userGroupRelationSchema.statics.findAllRelation = function (group) {
  32. debug('findAllGroups is called');
  33. var UserGroupRelation = this;
  34. return new Promise(function (resolve, reject) {
  35. UserGroupRelation
  36. .find({ relatedGroup: group })
  37. .exec(function (err, userGroupRelationData) {
  38. if (err) {
  39. return reject(err);
  40. }
  41. return resolve(userGroupRelationData);
  42. });
  43. });
  44. };
  45. // ページネーション利用の検索
  46. userGroupRelationSchema.statics.findUserGroupRelationsWithPagination = function(options, callback) {
  47. this.paginate({ page: options.page || 1, limit: options.limit || PAGE_ITEMS }, function(err, result) {
  48. if (err) {
  49. debug('Error on pagination:', err);
  50. return callback(err, null);
  51. }
  52. return callback(err, result);
  53. });
  54. };
  55. // 関係性の生成
  56. userGroupRelationSchema.statics.createRelation = function(userGroup, user, callback) {
  57. var UserGroupRelation = this
  58. , newUserGroupRelation = new UserGroupRelation();
  59. newUserGroupRelation.relatedGroup = group;
  60. newUserGroupRelation.relatedUser = user;
  61. newUserGroupRelation.createdAt = Date.now();
  62. newUserGroupRelation.save(function(err, userGroupRelationData) {
  63. return callback(err, userGroupRelationData);
  64. });
  65. };
  66. userGroupRelationSchema.statics.PAGE_ITEMS = PAGE_ITEMS;
  67. return mongoose.model('UserGroupRelation', userGroupRelationSchema);
  68. };