attachment.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. module.exports = function(crowi) {
  2. var debug = require('debug')('crowi:models:attachment')
  3. , mongoose = require('mongoose')
  4. , ObjectId = mongoose.Schema.Types.ObjectId
  5. , Promise = require('bluebird')
  6. ;
  7. function generateFileHash (fileName) {
  8. var hasher = require('crypto').createHash('md5');
  9. hasher.update(fileName);
  10. return hasher.digest('hex');
  11. }
  12. attachmentSchema = new mongoose.Schema({
  13. page: { type: ObjectId, ref: 'Page', index: true },
  14. creator: { type: ObjectId, ref: 'User', index: true },
  15. filePath: { type: String, required: true },
  16. fileName: { type: String, required: true },
  17. originalName: { type: String },
  18. fileFormat: { type: String, required: true },
  19. fileSize: { type: Number, default: 0 },
  20. createdAt: { type: Date, default: Date.now }
  21. });
  22. attachmentSchema.statics.getListByPageId = function(id) {
  23. var self = this;
  24. return new Promise(function(resolve, reject) {
  25. self
  26. .find({page: id})
  27. .sort({'updatedAt': 1})
  28. .populate('creator')
  29. .exec(function(err, data) {
  30. if (err) {
  31. return reject(err);
  32. }
  33. if (data.length < 1) {
  34. return resolve([]);
  35. }
  36. debug(data);
  37. return resolve(data);
  38. });
  39. });
  40. };
  41. attachmentSchema.statics.create = function(pageId, creator, filePath, originalName, fileName, fileFormat, fileSize) {
  42. var Attachment = this;
  43. return new Promise(function(resolve, reject) {
  44. var newAttachment = new Attachment();
  45. newAttachment.page = pageId;
  46. newAttachment.creator = creator._id;
  47. newAttachment.filePath = filePath;
  48. newAttachment.originalName = originalName;
  49. newAttachment.fileName = fileName;
  50. newAttachment.fileFormat = fileFormat;
  51. newAttachment.fileSize = fileSize;
  52. newAttachment.createdAt = Date.now();
  53. newAttachment.save(function(err, data) {
  54. if (err) {
  55. debug('Error on saving attachment.', err);
  56. return reject(err);
  57. }
  58. debug('Attachment saved.', data);
  59. return resolve(data);
  60. });
  61. });
  62. };
  63. attachmentSchema.statics.createAttachmentFilePath = function (pageId, fileName, fileType) {
  64. var ext = '.' + fileName.match(/(.*)(?:\.([^.]+$))/)[2];
  65. return 'attachment/' + pageId + '/' + generateFileHash(fileName) + ext;
  66. };
  67. return mongoose.model('Attachment', attachmentSchema);
  68. };