Skip to content

Commit

Permalink
Use data object tag if child model is null (#139)
Browse files Browse the repository at this point in the history
* use data object if child model is null

* validate data type

* 2.11.3
  • Loading branch information
kbarbounakis committed Jan 31, 2024
1 parent 12bfa2d commit b57abf1
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 3 deletions.
24 changes: 23 additions & 1 deletion data-ref-object-listener.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@
var async = require('async');
var {HasParentJunction} = require('./has-parent-junction');
var {DataObjectJunction} = require('./data-object-junction');
var {DataObjectTag} = require('./data-object-tag');
var {DataError} = require('@themost/common');
var {DataConfigurationStrategy} = require('./data-configuration');
var _ = require('lodash');
var {hasOwnProperty} = require('./has-own-property');

Expand Down Expand Up @@ -171,7 +173,27 @@ function beforeRemoveChildConnectedObjects(event, mapping, callback) {
target = event.model.convert(event.target),
parentModel = event.model,
parentField = parentModel.getAttribute(mapping.parentField);
var junction = new HasParentJunction(target, mapping);
/**
* @type {import('./types').DataContext}
*/
var context = event.model.context;
var isDataType = false;
// if child model is null, then check if child attribute is a primitive data type
if (mapping.childModel == null) {
/**
* try to find attribute by using refersTo property
* @type {import('./types').DataField}
*/
var childAttribute = event.model.getAttribute(mapping.refersTo);
if (childAttribute == null) {
return callback(new DataError('E_ATTR', 'Cannot find child attribute', event.model.name, mapping.refersTo));
}
isDataType = context.getConfiguration().getStrategy(DataConfigurationStrategy).hasDataType(childAttribute.type);
if (!isDataType) {
return callback(new DataError('E_ATTR', 'Invalid attribute type', event.model.name, mapping.refersTo));
}
}
var junction = isDataType ? new DataObjectTag(target, mapping) : new HasParentJunction(target, mapping);
return parentModel.where(parentModel.primaryKey).equal(target.getId())
.select(parentField.name)
.cache(false)
Expand Down
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@themost/data",
"version": "2.11.2",
"version": "2.11.3",
"description": "MOST Web Framework Codename Blueshift - Data module",
"main": "index.js",
"scripts": {
Expand Down
16 changes: 16 additions & 0 deletions spec/DataObjectTag.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -184,4 +184,20 @@ describe('DataObjectTag', () => {
});
});

it('should try to delete parent', async () => {
await TestUtils.executeInTransaction(context, async () => {

const Users = context.model('User').silent()
await Users.save({
name: 'test.user@example.com'
})
let user = await Users.where('name').equal('test.user@example.com').getTypedItem();
await user.property('tags').silent().insert([
'NewUser',
'ValidUser'
]);
await expect(Users.remove(user)).resolves.toBeUndefined();
});
});

});

0 comments on commit b57abf1

Please sign in to comment.