attachment.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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' },
  14. creator: { type: ObjectId, ref: 'User' },
  15. filePath: { type: String, required: true },
  16. fileName: { type: String, required: true },
  17. fileFormat: { type: String, required: true },
  18. createdAt: { type: Date, default: Date.now }
  19. });
  20. attachmentSchema.statics.getListByPageId = function(id) {
  21. var self = this;
  22. return new Promise(function(resolve, reject) {
  23. self
  24. .find({page: id})
  25. .sort('updatedAt', -1)
  26. .exec(function(err, data) {
  27. if (err) {
  28. return reject(err);
  29. }
  30. if (data.length < 1) {
  31. return resolve([]);
  32. }
  33. return data.populate(
  34. [{path: 'creator', model: 'User'}],
  35. function (err, populatedData) {
  36. return resolve(populatedData);
  37. }
  38. );
  39. });
  40. });
  41. };
  42. attachmentSchema.statics.create = function(pageId, creator, filePath, fileName, fileFormat) {
  43. var Attachment = this;
  44. return new Promise(function(resolve, reject) {
  45. var newAttachment = new Attachment();
  46. newAttachment.page = pageId;
  47. newAttachment.creator = creator._id;
  48. newAttachment.filePath = filePath;
  49. newAttachment.fileName = fileName;
  50. newAttachment.fileFormat = fileFormat;
  51. newAttachment.createdAt = Date.now();
  52. newAttachment.save(function(err, data) {
  53. debug('Attachment saved.', data);
  54. if (err) {
  55. return reject(err);
  56. }
  57. return resolve(data);
  58. });
  59. });
  60. };
  61. attachmentSchema.statics.createAttachmentFilePath = function (pageId, fileName, fileType) {
  62. var ext = '.' + fileName.match(/(.*)(?:\.([^.]+$))/)[2];
  63. return 'attachment/' + pageId + '/' + generateFileHash(fileName) + ext;
  64. };
  65. return mongoose.model('Attachment', attachmentSchema);
  66. };