@universis/evaluations
Version:
Universis evaluations library
148 lines (108 loc) • 6.03 kB
JavaScript
;var _data = require("@themost/data");
var _lodash = _interopRequireDefault(require("lodash"));
var _path = _interopRequireDefault(require("path"));
var _utils = require("@themost/common/utils");
var _errors = require("@themost/common/errors");var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _class, _class2;function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {var desc = {};Object.keys(descriptor).forEach(function (key) {desc[key] = descriptor[key];});desc.enumerable = !!desc.enumerable;desc.configurable = !!desc.configurable;if ('value' in desc || desc.initializer) {desc.writable = true;}desc = decorators.slice().reverse().reduce(function (desc, decorator) {return decorator(target, property, desc) || desc;}, desc);if (context && desc.initializer !== void 0) {desc.value = desc.initializer ? desc.initializer.call(context) : void 0;desc.initializer = undefined;}if (desc.initializer === void 0) {Object.defineProperty(target, property, desc);desc = null;}return desc;}
/**
* @class
* @property {number} id
* @augments {DataObject}
*/let
EvaluationDocument = (_dec = _data.EdmMapping.entityType('EvaluationDocument'), _dec2 =
_data.EdmMapping.param('extraAttributes', 'Object', true, true), _dec3 =
_data.EdmMapping.param('file', _data.EdmType.EdmStream, false), _dec4 =
_data.EdmMapping.action('Add', 'EvaluationDocument'), _dec5 =
_data.EdmMapping.param('attachment', 'EvaluationDocument', true, true), _dec6 =
_data.EdmMapping.action('RemoveAttachment', 'EvaluationDocument'), _dec(_class = (_class2 = class EvaluationDocument extends _data.DataObject {/**
* @constructor
*/constructor() {super();}static async next(context) {return await new Promise((resolve, reject) => {context.db.nextIdentity('EvaluationDocument', 'documentNumber', (err, value) => {if (err) {return reject(err);}return resolve(value);});});} /**
* Adds an attachment
* @param {*} file
* @param {*=} extraAttributes
*/static async add(context, file, extraAttributes) {const attachment = Object.assign({ name: file.contentFileName }, file, extraAttributes);return await EvaluationDocument._addAttachment(context, attachment);} /**
* Removes an attachment
* @param {*} attachment
*/static async removeAttachment(context, attachment) {return await EvaluationDocument._removeAttachment(context, attachment.id);}static _addAttachment(context, file) {let finalResult;return new Promise((resolve, reject) => {context.db.executeInTransaction((callback) => {if (typeof file.originalname === 'string') {
file.name = file.originalname.replace(/\.[A-Z0-9]+$/ig, function (x) {
return x.toLowerCase();
});
}
const mime = file.mimetype || file.contentType;
if (_lodash.default.isNil(mime)) {
return reject(new Error('The specified file type is not supported by the system.'));
}
const addAttributes = {};
_lodash.default.forEach(context.model(file.additionalType || 'EvaluationDocument').attributeNames, (attribute) => {
if (Object.prototype.hasOwnProperty.call(file, attribute)) {
addAttributes[attribute] = file[attribute];
}
});
const newAttachment = _lodash.default.assign(addAttributes, { contentType: mime });
const svc = context.getApplication().getService(function PrivateContentService() {});
//add attachment to attachments
let filePath;
if (file.destination && file.filename) {
filePath = _path.default.resolve(file.destination, file.filename);
} else {
filePath = file.path;
}
newAttachment.additionalType = file.additionalType || 'EvaluationDocument';
svc.copyFrom(context, filePath, newAttachment, function (err) {
if (err) {
_utils.TraceUtils.error(err);
return callback(new _errors.HttpServerError());
}
svc.resolveUrl(context, newAttachment, function (err, url) {
if (err) {
return callback(err);
} else {
finalResult = _lodash.default.assign({}, newAttachment, {
url: url,
name: newAttachment.filename });
return callback();
}
});
});
}, (err) => {
if (err) {
return reject(err);
}
return resolve(finalResult);
});
});
}
removeAttachment(context, id) {
let result;
return new Promise((resolve, reject) => {
context.db.executeInTransaction((callback) => {
//get attachment
return context.model('Attachment').where('id').equal(id).getItem().then((attachment) => {
if (attachment) {
//remove attachment connection
return self.property('attachments').remove(attachment, (err) => {
//remove attachment
if (err) {
return callback(err);
}
return context.model('Attachment').silent().remove(attachment).then(() => {
result = attachment;
return callback();
}).catch((err) => {
return callback(err);
});
});
}
return callback(new _errors.DataNotFoundError());
}).catch((err) => {
return callback(err);
});
}, (err) => {
if (err) {
return reject(err);
}
return resolve(result);
});
});
}}, (_applyDecoratedDescriptor(_class2, "add", [_dec2, _dec3, _dec4], Object.getOwnPropertyDescriptor(_class2, "add"), _class2), _applyDecoratedDescriptor(_class2, "removeAttachment", [_dec5, _dec6], Object.getOwnPropertyDescriptor(_class2, "removeAttachment"), _class2)), _class2)) || _class);
module.exports = EvaluationDocument;
//# sourceMappingURL=evaluation-document-model.js.map