ee-soa-service
Advanced tools
Comparing version 0.2.3 to 0.2.4
@@ -16,3 +16,3 @@ | ||
this.controllerActions = ['list', 'listOne', 'create', 'createOrUpdate', 'createRelation', 'update', 'delete', 'describe']; | ||
this.controllerActions = ['list', 'listOne', 'create', 'createOrUpdate', 'createRelation', 'update', 'updateRelation', 'delete', 'deleteRelation', 'describe']; | ||
@@ -48,2 +48,6 @@ process.nextTick(function() { | ||
, updateRelation: function(queryData, callback) { | ||
callback(new Error("updateRelation action not implemented on controller")); | ||
} | ||
, delete: function(queryData, callback) { | ||
@@ -53,2 +57,6 @@ callback(new Error("delete action not implemented on controller")); | ||
, deleteRelation: function(queryData, callback) { | ||
callback(new Error("deleteRelation action not implemented on controller")); | ||
} | ||
, describe: function(queryData, callback) { | ||
@@ -55,0 +63,0 @@ callback(new Error("describe action not implemented on controller")); |
@@ -705,18 +705,71 @@ | ||
, update: function(queryData, callback, baseQuery) { | ||
this._getSingleModel(queryData, baseQuery, function(err, data) { | ||
if(!queryData.hasResourceId()) return callback(new Error('no resourceId provided!')); | ||
// UPDATE RESOURCE | ||
if(!queryData.hasRelatedTo()) { | ||
this._getSingleModel(queryData, baseQuery, function(err, data) { | ||
if(err) return callback(err); | ||
if(data) { | ||
queryData.getContent(function(err, content) { | ||
if(err) return callback(err); | ||
if(!content) return callback(new Error('[' + this.table + '] no content in request provided!')); | ||
if(Object.hasOwnProperty.call(content, 'undefined')) return callback(new Error('[' + this.table + '] try to set variable "undefined"!')); | ||
Object.keys(content).forEach(function(fieldName) { | ||
data[fieldName] = content[fieldName]; | ||
}.bind(this)); | ||
data.save(function(err, record) { | ||
if(err) return callback(err); | ||
this.listOne(queryData, callback); | ||
}.bind(this)); | ||
}.bind(this)); | ||
} | ||
else { | ||
callback(err, null, 26); | ||
} | ||
}.bind(this)); | ||
} | ||
// UPDATE RELATIONS | ||
else { | ||
this.updateRelation(queryData, callback, baseQuery); | ||
} | ||
} | ||
// ONE CAN ONLY UPDATE MAPPING RELATIONS WITH DATA | ||
, updateRelation: function(queryData, callback, baseQuery) { | ||
queryData.getContent(function(err, content) { | ||
if(err) return callback(err); | ||
if(!content) return callback(new Error('[' + this.table + '] no content in request provided!')); | ||
if(Object.hasOwnProperty.call(content, 'undefined')) return callback(new Error('[' + this.table + '] try to set variable "undefined"!')); | ||
if(data) { | ||
queryData.getContent(function(err, content) { | ||
var id = queryData.getResourceId(); | ||
var withModel = queryData.getRelatedTo().model; | ||
var referenceId = queryData.getRelatedTo().id; | ||
if(!id || !withModel || !referenceId) { | ||
return callback(new Error('[' + this.table + '] resource id || relatedTo model || relatedTo id => not provided!')); | ||
} | ||
//mapping | ||
if(Object.hasOwnProperty.call(this.specs.hasMany, withModel)) { | ||
var idFilter = {}; | ||
idFilter[this.specs.hasMany[withModel].table[this.table]] = id; | ||
idFilter[this.specs.hasMany[withModel].table[withModel]] = referenceId; | ||
this.root[this.specs.hasMany[withModel].table.name](['*'], idFilter).findOne(function(err, mapping) { | ||
if(err) return callback(err); | ||
if(!content) return callback(new Error('[' + this.table + '] no content in request provided!')); | ||
if(!mapping) return callback(new Error('relation not found')); | ||
Object.keys(content).forEach(function(fieldName) { | ||
data[fieldName] = content[fieldName]; | ||
mapping[fieldName] = content[fieldName]; | ||
}.bind(this)); | ||
data.save(function(err, record) { | ||
mapping.save(function(err, result) { | ||
if(err) return callback(err); | ||
this.listOne(queryData, callback); | ||
callback(null, mapping); | ||
}.bind(this)); | ||
@@ -727,5 +780,6 @@ | ||
else { | ||
callback(err, null, 26); | ||
} | ||
}.bind(this)); | ||
callback(new Error('relation is no mapping!')); | ||
} | ||
}.bind(this)); | ||
} | ||
@@ -738,5 +792,19 @@ | ||
if(!queryData.hasRelatedTo()) { | ||
(baseQuery || this.rootQuery)({id: queryData.getResourceId()}).limit(1).delete(function(err) { | ||
callback(err); | ||
this._getSingleModel(queryData, baseQuery, function(err, data) { | ||
if(err) return callback(err); | ||
if(data) { | ||
data.delete(function(err) { | ||
if(err) return callback(err); | ||
callback(null, data); | ||
}.bind(this)); | ||
} | ||
else { | ||
callback(err, null, 26); | ||
} | ||
}.bind(this)); | ||
// (baseQuery || this.rootQuery)({id: queryData.getResourceId()}).delete(function(err) { | ||
// callback(err); | ||
// }.bind(this)); | ||
} | ||
@@ -762,3 +830,3 @@ // DELETE RELATIONS | ||
if(err) return callback(err, data); | ||
if(!data) return callback(new Error('relation not found'), null); | ||
if(!data) return callback(new Error('relation not found')); | ||
@@ -783,3 +851,3 @@ data[withModel] = null; | ||
if(err) return callback(err); | ||
if(!data) return callback(new Error('relation not found'), null); | ||
if(!data) return callback(new Error('relation not found')); | ||
@@ -805,3 +873,3 @@ data[this.specs.belongsTo[withModel].targetColumn] = null; | ||
if(err) return callback(err); | ||
if(!mapping) return callback(new Error('relation not found'), null); | ||
if(!mapping) return callback(new Error('relation not found')); | ||
@@ -808,0 +876,0 @@ mapping.delete(function(err) { |
@@ -146,3 +146,4 @@ | ||
if((action === 'create' || action === 'update' || action === 'createOrUpdate') && req.hasRelatedTo()) { | ||
// TODO: move to DefaultORMController | ||
if((action === 'create' || action === 'createOrUpdate') && req.hasRelatedTo()) { | ||
action = 'createRelation'; | ||
@@ -149,0 +150,0 @@ } |
@@ -5,3 +5,3 @@ { | ||
, "keywords" : ["ee", "soa", "service"] | ||
, "version" : "0.2.3" | ||
, "version" : "0.2.4" | ||
, "author": { | ||
@@ -8,0 +8,0 @@ "name" : "Tobias Kneubuehler" |
70411
1207