@trusthab/composable-resources
Version:
migrating https://github.com/knetikmedia/hab-api/tree/integration/app/resources/composable
113 lines (104 loc) • 2.47 kB
JavaScript
const composer = require('../mixin_loader');
module.exports = (App) => {
const { underscore } = require('inflected');
class SettingResource {
static mixins() {
return [
// Functionality
'Validatable',
'Templatable',
// ORMish
'Persistable',
'KnetikCloudPersistence'
// 'ObjectCommon'
];
}
static simpleProperties() {
return true;
}
static fields() {
return {
id: {
type: 'integer',
or: ['null']
},
name: {
type: 'text',
minLength: 1,
path: 'name'
},
description: {
type: 'text',
path: 'long_description'
},
icon: {
type: 'text',
path: 'data.icon'
},
current_value: {
type: 'text',
or: ['null'],
path: 'data.current_value'
},
default_value: {
type: 'text',
path: 'data.default_value'
},
category: {
type: 'text',
path: 'category'
},
created_at: {
type: 'integer',
or: ['null'],
path: 'created_date'
},
updated_at: {
type: 'integer',
or: ['null'],
path: 'updated_date'
},
deleted_at: {
schema_ignore: true,
type: 'integer',
or: ['null'],
path: 'data.deleted_at'
},
template: {
type: 'integer',
path: 'template',
schema_ignore: true
}
};
}
static knetikCloudMethods() {
return {
search: {
index: 'objects',
template: 'settings'
},
find: {
api: 'ObjectsApi',
method: 'getObjectItem',
paramsBuilder: id => ['settings', id]
},
create: {
api: 'ObjectsApi',
method: 'createObjectItem',
paramsBuilder: params => ['settings', { objectItem: params }]
},
update: {
api: 'ObjectsApi',
method: 'updateObjectItem',
paramsBuilder: (id, params) => ['settings', id, { cascade: false, objectItem: params }]
},
destroy: {
api: 'ObjectsApi',
method: 'deleteObjectItem',
paramsBuilder: id => ['settings', id]
}
};
}
}
return composer(SettingResource, App);
};