bookmark.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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. if (err.code === 11000) { // duplicate key (dummy reesponse of new object)
  49. return resolve(newBookmark);
  50. }
  51. return reject(err);
  52. }
  53. resolve(bookmark);
  54. });
  55. });
  56. };
  57. bookmarkSchema.statics.remove = function(page, user) {
  58. var Bookmark = this;
  59. return new Promise(function(resolve, reject) {
  60. Bookmark.findOneAndRemove({page: page, user: user}, function(err, data) {
  61. if (err) {
  62. debug('Bookmark.findOneAndRemove failed', err);
  63. return reject(err);
  64. }
  65. return resolve(data);
  66. });
  67. });
  68. };
  69. return mongoose.model('Bookmark', bookmarkSchema);
  70. };