bookmark.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. module.exports = function(crowi) {
  2. var debug = require('debug')('crowi:models:bookmark')
  3. , mongoose = require('mongoose')
  4. , ObjectId = mongoose.Schema.Types.ObjectId
  5. , bookmarkSchema;
  6. bookmarkSchema = new mongoose.Schema({
  7. page: { type: ObjectId, ref: 'Page', index: true },
  8. user: { type: ObjectId, ref: 'User', index: true },
  9. createdAt: { type: Date, default: Date.now() }
  10. });
  11. bookmarkSchema.index({page: 1, user: 1}, {unique: true});
  12. // bookmark チェック用
  13. bookmarkSchema.statics.findByPageIdAndUserId = function(pageId, userId) {
  14. var Bookmark = this;
  15. return new Promise(function(resolve, reject) {
  16. return Bookmark.findOne({ page: pageId, user: userId }, function(err, doc) {
  17. if (err) {
  18. return reject(err);
  19. }
  20. return resolve(doc);
  21. });
  22. });
  23. };
  24. bookmarkSchema.statics.findByUser = function(user, option, callback) {
  25. var Bookmark = this;
  26. var limit = option.limit || 50;
  27. var offset = option.skip || 0;
  28. Bookmark
  29. .find({ user: user._id })
  30. //.sort('createdAt', -1)
  31. .skip(offset)
  32. .limit(limit)
  33. .exec(function(err, bookmarks) {
  34. debug ('bookmarks', bookmarks);
  35. callback(err, bookmarks);
  36. });
  37. };
  38. bookmarkSchema.statics.add = function(page, user) {
  39. var Bookmark = this;
  40. return new Promise(function(resolve, reject) {
  41. var newBookmark = new Bookmark;
  42. newBookmark.page = page;
  43. newBookmark.user = user;
  44. newBookmark.createdAt = Date.now();
  45. newBookmark.save(function(err, bookmark) {
  46. debug('Bookmark.save', err, bookmark);
  47. if (err) {
  48. return reject(err);
  49. }
  50. resolve(bookmark);
  51. });
  52. });
  53. };
  54. bookmarkSchema.statics.remove = function(page, user) {
  55. var Bookmark = this;
  56. return new Promise(function(resolve, reject) {
  57. Bookmark.findOneAndRemove({page: page, user: user}, function(err, data) {
  58. if (err) {
  59. debug('Bookmark.findOneAndRemove failed', err);
  60. return reject(err);
  61. }
  62. return resolve(data);
  63. });
  64. });
  65. };
  66. return mongoose.model('Bookmark', bookmarkSchema);
  67. };