@axway/api-builder-plugin-dc-mbs
Version:
Mobile Backend Services connector
45 lines (39 loc) • 1.17 kB
JavaScript
const { getTranslatedError, translateFields } = require('../utils');
const ignoreMissingFields = true;
function save(Model, instance, next) {
this.logger.trace('MBS.save', { instance, model: Model.name });
const pk = instance.getPrimaryKey();
const fields = instance.toPayload();
// reserved fields that cannot be used on update
if (fields.created_at) {
delete fields.created_at;
}
if (fields.updated_at) {
delete fields.updated_at;
}
this.db.customObjectsUpdate({
classname: Model.name,
id: pk,
fields: translateFields(fields)
}, (err, response) => {
if (err) {
// Do not expose `err` via callback (information disclosure)
return next(getTranslatedError(this, err));
}
const items = response.body.response[Model.name];
if (items.length !== 1) {
const msg = `MBS expected 1 item but got ${items.length}`;
this.logger.error(msg);
return next(new Error(msg));
}
const item = items[0];
this.logger.trace('MBS saved', item);
const value = Model.instance(item, ignoreMissingFields);
const pkName = Model.getPrimaryKeyName();
value.setPrimaryKey(item[pkName]);
next(null, value);
});
}
module.exports = {
save
};