linagora/openpaas-esn

View on GitHub
backend/core/message/attachments.js

Summary

Maintainability
A
25 mins
Test Coverage
'use strict';

var ObjectId = require('mongoose').Types.ObjectId;
var filestore = require('../filestore');

function storeAttachment(metaData, stream, options, callback) {
  if (!metaData.name) {
    return callback(new Error('Attachment name is required.'));
  }
  if (!metaData.contentType) {
    return callback(new Error('Attachment contentType is required.'));
  }
  if (!stream) {
    return callback(new Error('Attachment stream is required.'));
  }

  options = options || {};

  var fileId = new ObjectId();

  var returnAttachmentModel = function(err, file) {
    if (err) {
      return callback(err);
    }

    var attachmentModel = {
      _id: fileId,
      name: metaData.name,
      contentType: metaData.contentType,
      length: file.length
    };

    callback(null, attachmentModel);
  };

  options.filename = metaData.name;

  filestore.store(fileId, metaData.contentType, {name: metaData.name, creator: metaData.creator}, stream, options, returnAttachmentModel);
}
module.exports.storeAttachment = storeAttachment;

function getAttachmentFile(attachment, callback) {
  if (!attachment) {
    return callback(new Error('Attachment parameter is missing.'));
  }

  filestore.get(attachment._id, callback);
}
module.exports.getAttachmentFile = getAttachmentFile;

function setMessageReference(attachment, message, callback) {
  if (!attachment) {
    return callback(new Error('Attachment parameter is missing.'));
  }

  if (!message) {
    return callback(new Error('Message parameter is missing.'));
  }
  return filestore.addMeta(attachment._id,
    {metadata: {referenced: [{objectType: 'message', id: message._id}]}},
  callback);
}
module.exports.setMessageReference = setMessageReference;