@universis/candidates
Version:
Universis api server plugin for study program candidates, internship selection etc
254 lines (103 loc) • 11 kB
JavaScript
;var _data = require("@themost/data");
var _EnableAttachmentModel = _interopRequireDefault(require("./EnableAttachmentModel"));
var _common = require("@themost/common");var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _class;function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {try {var info = gen[key](arg);var value = info.value;} catch (error) {reject(error);return;}if (info.done) {resolve(value);} else {Promise.resolve(value).then(_next, _throw);}}function _asyncToGenerator(fn) {return function () {var self = this,args = arguments;return new Promise(function (resolve, reject) {var gen = fn.apply(self, args);function _next(value) {asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);}function _throw(err) {asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);}_next(undefined);});};}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;}
function tryCloseStream(stream) {
if (stream && typeof stream.close === 'function') {
try {
stream.close();
} catch (error) {
_common.TraceUtils.warn(`(tryCloseStream) An error occurred while trying to close a stream.`);
_common.TraceUtils.warn(error);
}
}
}let
StudyProgramRegisterAction = (_dec =
_data.EdmMapping.param('extraAttributes', 'Object', true, true), _dec2 =
_data.EdmMapping.param('file', _data.EdmType.EdmStream, false), _dec3 =
_data.EdmMapping.action('AddAttachment', 'Attachment'), _dec4 =
_data.EdmMapping.param('attachment', 'Attachment', true, true), _dec5 =
_data.EdmMapping.action('RemoveAttachment', 'Attachment'), _dec6 =
_data.EdmMapping.param('items', _data.EdmType.CollectionOf('CourseClassRegisterAction'), true, true), _dec7 =
_data.EdmMapping.action('CourseRegistrations', _data.EdmType.CollectionOf('CourseClassRegisterAction')), _dec8 =
_data.EdmMapping.param('items', _data.EdmType.CollectionOf('InternshipRegisterAction'), true, true), _dec9 =
_data.EdmMapping.action('InternshipRegistrations', _data.EdmType.CollectionOf('InternshipRegisterAction')), _dec10 =
_data.EdmMapping.param('item', 'StudyProgramRegisterActionMessage', true, true), _dec11 =
_data.EdmMapping.action('messages', 'StudyProgramRegisterActionMessage'), _dec12 =
_data.EdmMapping.func('review', 'StudyProgramRegisterActionReview'), _dec13 =
_data.EdmMapping.param('item', 'StudyProgramRegisterActionReview', true, true), _dec14 =
_data.EdmMapping.action('review', 'StudyProgramRegisterActionReview'), _dec15 =
_data.EdmMapping.param('message', 'Object', true, true), _dec16 =
_data.EdmMapping.param('attachment', _data.EdmType.EdmStream, false), _dec17 =
_data.EdmMapping.action('SendMessage', 'RegisterActionMessage'), (_class = class StudyProgramRegisterAction extends _EnableAttachmentModel.default {constructor() {super();} /**
* Adds an attachment
* @param {*} file
* @param {*=} extraAttributes
*/addAttachment(file, extraAttributes) {var _superprop_getAddAttachment = () => super.addAttachment,_this = this;return _asyncToGenerator(function* () {try {const attachment = Object.assign({ name: file.contentFileName, originalname: file.contentFileName }, file, extraAttributes);const result = yield _superprop_getAddAttachment().call(_this, attachment);tryCloseStream(file);return result;} catch (err) {// try to close stream
tryCloseStream(file); // and throw error
throw err;}})();} /**
* Removes an attachment
* @param {*} attachment
*/removeAttachment(attachment) {var _superprop_getRemoveAttachment = () => super.removeAttachment,_this2 = this;return _asyncToGenerator(function* () {return yield _superprop_getRemoveAttachment().call(_this2, attachment.id);})();} /**
* Set preferred course classes
* @param {Array<any>} items
*/setCourseRegistrations(items) {var _this3 = this;return _asyncToGenerator(function* () {// set initiator
items.forEach(item => {item.initiator = { id: _this3.getId() };});return _this3.context.model('CourseClassRegisterAction').save(items);})();} /**
* Set preferred internships
* @param {Array<any>} items
*/setInternshipRegistrations(items) {var _this4 = this;return _asyncToGenerator(function* () {// set initiator
items.forEach(item => {item.initiator = { id: _this4.getId() };});return _this4.context.model('InternshipRegisterAction').save(items);})();} /**
* Add action messages
* @param {Array<any>} items
*/postMessages(item) {var _this5 = this;return _asyncToGenerator(function* () {// set initiator
item.action = _this5.getId();if ((yield _this5.validateRegisterViewer()) === true) {return _this5.context.model('StudyProgramRegisterActionMessage').silent().save(item);}return _this5.context.model('StudyProgramRegisterActionMessage').save(item);})();} /**
* Gets item review
*/getReview() {var _this6 = this;return _asyncToGenerator(function* () {let query = _this6.context.model('StudyProgramRegisterActionReview').where('itemReviewed').equal(_this6.getId());if ((yield _this6.validateRegisterViewer()) === true) {return query.silent().prepare();}return query.prepare();})();} /**
* Set item review
* @param {*} item
*/setReview(item) {var _this7 = this;return _asyncToGenerator(function* () {const StudyProgramRegisterActionReviews = _this7.context.model('StudyProgramRegisterActionReview'); // infer object state
let currentReview;const validViewer = yield _this7.validateRegisterViewer();if (validViewer) {currentReview = yield StudyProgramRegisterActionReviews.where('itemReviewed').equal(_this7.getId()).and('createdBy/name').equal(_this7.context.user.name).silent().getItem();} else {currentReview = yield StudyProgramRegisterActionReviews.where('itemReviewed').equal(_this7.getId()).and('createdBy/name').equal(_this7.context.user.name).getItem();}if (currentReview == null) {if (item == null) {return;} // a new item is going to be inserted
delete item.id; // set reviewed item
item.itemReviewed = _this7.getId();} else {if (item == null) {// delete review
StudyProgramRegisterActionReviews.remove(currentReview);} // up
item.id = currentReview.id; // set reviewed item
item.itemReviewed = _this7.getId();}if (validViewer === true) {return StudyProgramRegisterActionReviews.silent().save(item);}return StudyProgramRegisterActionReviews.save(item);})();} /**
* Adds an attachment
* @param {*} file
* @param {*=} extraAttributes
*/sendMessage(attachment, message) {var _this8 = this;const thisArg = this;return new Promise((resolve, reject) => {this.context.db.executeInTransaction(cb => {_asyncToGenerator(function* () {const StudyProgramRegisterActionMessage = thisArg.context.model('StudyProgramRegisterActionMessage');const newMessage = StudyProgramRegisterActionMessage.convert(message);Object.assign(newMessage, { action: thisArg.getId() }); // add message
if ((yield _this8.validateRegisterViewer()) === true) {yield StudyProgramRegisterActionMessage.silent().save(newMessage);} else {yield StudyProgramRegisterActionMessage.save(newMessage);} // if message has an attachment
if (attachment) {// prepare attachment data
const newAttachment = Object.assign({ name: attachment.contentFileName, originalname: attachment.contentFileName }, attachment); // and add attachment
yield newMessage.addAttachment(newAttachment);}})().then(() => {return cb();}).catch(err => {return cb(err);});}, err => {if (err) {return reject(err);}return resolve(message);});});}
// Function that validates if the current user is a viewer of the StudyProgramEnrollmentEvent of this StudyProgramRegisterAction
validateRegisterViewer() {var _this9 = this;return _asyncToGenerator(function* () {
const currentUser = yield _this9.context.
model('User').
where('name').
equal(_this9.context.user.name).
select('id').
value();
const action = yield _this9.context.
model('StudyProgramRegisterAction').
where('id').
equal(_this9.getId()).
select('id', 'studyProgramEnrollmentEvent').
expand(
{
'name': 'studyProgramEnrollmentEvent',
'options': {
'$select': 'id, viewers',
'$expand': 'viewers($select=id)' } }).
silent().
getItem();
if (action != null && action.studyProgramEnrollmentEvent != null) {
for (const viewer of action.studyProgramEnrollmentEvent.viewers) {
if (viewer.id === currentUser) {
return true;
}
}
}
return false;})();
}}, (_applyDecoratedDescriptor(_class.prototype, "addAttachment", [_dec, _dec2, _dec3], Object.getOwnPropertyDescriptor(_class.prototype, "addAttachment"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, "removeAttachment", [_dec4, _dec5], Object.getOwnPropertyDescriptor(_class.prototype, "removeAttachment"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, "setCourseRegistrations", [_dec6, _dec7], Object.getOwnPropertyDescriptor(_class.prototype, "setCourseRegistrations"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, "setInternshipRegistrations", [_dec8, _dec9], Object.getOwnPropertyDescriptor(_class.prototype, "setInternshipRegistrations"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, "postMessages", [_dec10, _dec11], Object.getOwnPropertyDescriptor(_class.prototype, "postMessages"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, "getReview", [_dec12], Object.getOwnPropertyDescriptor(_class.prototype, "getReview"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, "setReview", [_dec13, _dec14], Object.getOwnPropertyDescriptor(_class.prototype, "setReview"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, "sendMessage", [_dec15, _dec16, _dec17], Object.getOwnPropertyDescriptor(_class.prototype, "sendMessage"), _class.prototype)), _class));
module.exports = StudyProgramRegisterAction;
//# sourceMappingURL=StudyProgramRegisterAction.js.map