diff --git a/common/mixins/switch-datasource-mixin.js b/common/mixins/switch-datasource-mixin.js index 206d066..06b098e 100644 --- a/common/mixins/switch-datasource-mixin.js +++ b/common/mixins/switch-datasource-mixin.js @@ -14,6 +14,7 @@ var logger = require('oe-logger'); var log = logger('switch-datasource-mixin'); var appinstance = require('../../server/server.js').app; +var versionMixin = require('./version-mixin.js'); function getScopeMatchedDS(model, list, scope) { var matchedds; @@ -225,6 +226,9 @@ module.exports = function SwitchDatasourceMixin(model) { if (ds) { // console.log('switch datasource ', modelName, ds.settings.name); model.attachTo(ds); + if (model.settings.mixins.VersionMixin) { + model.switchVersion = versionMixin.switchVersion; + } return ds; } } diff --git a/common/mixins/version-mixin.js b/common/mixins/version-mixin.js index 7c2966b..be690b5 100644 --- a/common/mixins/version-mixin.js +++ b/common/mixins/version-mixin.js @@ -20,6 +20,59 @@ var uuidv4 = require('uuid/v4'); +function versionMixinBeforeSave(ctx, next) { + // if (Model.modelName !== ctx.Model.modelName) { + // return next(); + // } + var data = ctx.data || ctx.instance; + var error; + if (ctx.isNewInstance) { + data._version = data._newVersion || data._version || uuidv4(); + delete data._oldVersion; + delete data._newVersion; + } else if (ctx.currentInstance) { + if (ctx.currentInstance.__remoteInvoked) { + if (!data._version) { + error = new Error(); + error.name = 'Data Error'; + error.message = 'current version must be specified in _version field'; + error.code = 'DATA_ERROR_071'; + error.type = 'DataModifiedError'; + error.retriable = false; + error.status = 422; + return next(error); + } + } + var version = data._version || ctx.currentInstance._version; + if (data._newVersion && data._newVersion === version) { + error = new Error(); + error.name = 'Data Error'; + error.message = 'current version and new version must be different'; + error.code = 'DATA_ERROR_071'; + error.type = 'DataModifiedError'; + error.retriable = false; + error.status = 422; + return next(error); + } + if (version.toString() !== ctx.currentInstance._version.toString()) { + error = new Error(); + error.name = 'Data Error'; + error.message = 'No record with version specified'; + error.code = 'DATA_ERROR_071'; + error.type = 'DataModifiedError'; + error.retriable = false; + error.status = 422; + return next(error); + } + data._oldVersion = version; + data._version = data._newVersion || uuidv4(); + delete data._newVersion; + } + // TODO replaceById will have ctx.instance, and not + // ctx.currentinstance, need to analyze that + next(); +}; + module.exports = function VersionMixin(Model) { if (Model.modelName === 'BaseEntity') { return; @@ -56,58 +109,7 @@ module.exports = function VersionMixin(Model) { next(); }); - Model.switchVersion = function versionMixinBeforeSave(ctx, next) { - // if (Model.modelName !== ctx.Model.modelName) { - // return next(); - // } - var data = ctx.data || ctx.instance; - var error; - if (ctx.isNewInstance) { - data._version = data._newVersion || data._version || uuidv4(); - delete data._oldVersion; - delete data._newVersion; - } else if (ctx.currentInstance) { - if (ctx.currentInstance.__remoteInvoked) { - if (!data._version) { - error = new Error(); - error.name = 'Data Error'; - error.message = 'current version must be specified in _version field'; - error.code = 'DATA_ERROR_071'; - error.type = 'DataModifiedError'; - error.retriable = false; - error.status = 422; - return next(error); - } - } - var version = data._version || ctx.currentInstance._version; - if (data._newVersion && data._newVersion === version) { - error = new Error(); - error.name = 'Data Error'; - error.message = 'current version and new version must be different'; - error.code = 'DATA_ERROR_071'; - error.type = 'DataModifiedError'; - error.retriable = false; - error.status = 422; - return next(error); - } - if (version.toString() !== ctx.currentInstance._version.toString()) { - error = new Error(); - error.name = 'Data Error'; - error.message = 'No record with version specified'; - error.code = 'DATA_ERROR_071'; - error.type = 'DataModifiedError'; - error.retriable = false; - error.status = 422; - return next(error); - } - data._oldVersion = version; - data._version = data._newVersion || uuidv4(); - delete data._newVersion; - } - // TODO replaceById will have ctx.instance, and not - // ctx.currentinstance, need to analyze that - next(); - }; + Model.switchVersion = versionMixinBeforeSave; // lock current _version Model.evObserve('persist', function versionMixinPersistsFn(ctx, next) { @@ -143,3 +145,5 @@ module.exports = function VersionMixin(Model) { } }); }; + +module.exports.switchVersion = versionMixinBeforeSave; \ No newline at end of file diff --git a/package.json b/package.json index a961d31..a22c5ab 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "oe-cloud", - "version": "1.7.0", + "version": "1.7.1", "main": "server/server.js", "engines": { "node": ">=6.9.0" diff --git a/server/boot/createAppUser.js b/server/boot/createAppUser.js deleted file mode 100644 index 88c3a6e..0000000 --- a/server/boot/createAppUser.js +++ /dev/null @@ -1,66 +0,0 @@ - -/** - * - * �2016-2017 EdgeVerve Systems Limited (a fully owned Infosys subsidiary), - * Bangalore, India. All Rights Reserved. - * - */ -var loopback = require('loopback'); -var async = require('async'); -var log = require('oe-logger')('create-Service-User'); -var app = require('../server').app; -var uuidv4 = require('uuid/v4'); - -var serviceName = app.get('app'); -var serviceUser = { - username: serviceName, - email: serviceName + '@oecloud.com', - id: serviceName, - password: uuidv4() -}; - -log.debug(log.defaultContext(), 'creating service user: ', serviceUser); -module.exports = function createAdminUser(app, done) { - var adminUserContext = { - ctx: { - tenantId: 'default', - remoteUser: 'system' - } - }; - - async.series([function serviceUserCreate(cb) { - var BaseUser = loopback.getModelByType('BaseUser'); - BaseUser.findOrCreate(serviceUser, adminUserContext, function baseUserCreate(err, res) { - if (err) { - log.error(log.defaultContext(), 'error in service user: ', err); - if (err.code === 11000) { - return cb(); - } - cb(err); - } else { - log.debug(log.defaultContext(), 'created service user: ', res); - cb(); - } - }); - }, function roleMappingOp(cb) { - var RoleMapping = loopback.getModelByType('BaseRoleMapping'); - RoleMapping.findOrCreate({ - id: serviceName, - principalType: 'USER', - principalId: serviceName, - roleId: 'admin' - }, adminUserContext, function roleMapppingCreate(err, res) { - if (err) { - if (err.code === 11000) { - return cb(); - } - cb(err); - } else { - cb(); - } - }); - }], - function finalCallback() { - done(); - }); -};