ee-soa-service
Advanced tools
Comparing version 0.2.1 to 0.2.2
@@ -716,7 +716,80 @@ | ||
(baseQuery || this.rootQuery)({id: queryData.getResourceId()}).limit(1).delete(function(err) { | ||
callback(err); | ||
}.bind(this)); | ||
// DELETE RESOURCE | ||
if(!queryData.hasRelatedTo()) { | ||
(baseQuery || this.rootQuery)({id: queryData.getResourceId()}).limit(1).delete(function(err) { | ||
callback(err); | ||
}.bind(this)); | ||
} | ||
// DELETE RELATIONS | ||
else { | ||
this.deleteRelation(queryData, callback, baseQuery); | ||
} | ||
} | ||
, deleteRelation: function(queryData, callback, baseQuery) { | ||
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!')); | ||
} | ||
//reference | ||
if(Object.hasOwnProperty.call(this.specs.hasOne, withModel)) { | ||
this._getSingleModel(queryData, baseQuery, function(err, data) { | ||
if(err) return callback(err, data); | ||
if(data) { | ||
data[withModel] = null; | ||
data.save(function(err, result) { | ||
if(err) return callback(err); | ||
this.listOne(queryData, callback); | ||
}.bind(this)); | ||
} | ||
}.bind(this)); | ||
} | ||
//belongsTo | ||
if(Object.hasOwnProperty.call(this.specs.belongsTo, withModel)) { | ||
var targetFilter = {}; | ||
targetFilter[this.specs.belongsTo[withModel].targetPrimary] = referenceId; | ||
this.root[withModel](targetFilter).findOne(function(err, data) { | ||
if(err) return callback(err); | ||
if(data) { | ||
data[this.specs.belongsTo[withModel].targetColumn] = null; | ||
} | ||
data.save(function(err, result) { | ||
if(err) return callback(err); | ||
this.listOne(queryData, callback); | ||
}.bind(this)) | ||
}.bind(this)); | ||
} | ||
//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); | ||
mapping.delete(function(err) { | ||
if(err) return err; | ||
this.listOne(queryData, callback); | ||
}.bind(this)) | ||
}.bind(this)); | ||
} | ||
} | ||
, describe: function(queryData, callback) { | ||
@@ -723,0 +796,0 @@ callback(null, this.specs); |
@@ -5,3 +5,3 @@ { | ||
, "keywords" : ["ee", "soa", "service"] | ||
, "version" : "0.2.1" | ||
, "version" : "0.2.2" | ||
, "author": { | ||
@@ -8,0 +8,0 @@ "name" : "Tobias Kneubuehler" |
65244
1131