import stampit from 'stampit';
import _ from 'lodash';
import {Meta, Model, Rename} from './base';
import QuerySet, {Rename as QsRename} from '../querySet';
const InstanceQuerySet = stampit().compose(QuerySet, QsRename).methods({
setGlobalConfig(properties = {}, config = {}){
this.properties = _.assign({}, this.properties, properties);
this.payload = {config};
this.method = 'PUT';
this.endpoint = 'config';
return this;
},
getGlobalConfig(properties = {}){
this.properties = _.assign({}, this.properties, properties);
this.method = 'GET';
this.endpoint = 'config';
return this;
}
});
const InstanceMeta = Meta({
name: 'instance',
pluralName: 'instances',
endpoints: {
'detail': {
'methods': ['delete', 'patch', 'put', 'get'],
'path': '/v1.1/instances/{name}/'
},
'list': {
'methods': ['post', 'get'],
'path': '/v1.1/instances/'
},
'rename': {
'methods': ['post'],
'path': '/v1.1/instances/{name}/rename/'
},
'config': {
'methods': ['get', 'put', 'patch'],
'path': '/v1.1/instances/{name}/snippets/config/'
}
},
relatedModels: [
'Admin', 'Class', 'Script', 'Schedule', 'InstanceInvitation', 'ApiKey'
, 'Trigger', 'ScriptEndpoint', 'User', 'Group', 'GCMDevice', 'Channel'
, 'APNSDevice', 'Template'
],
mapDefaults: {
instanceName: 'name'
}
});
const InstanceConstraints = {
name: {
presence: true,
string: true,
length: {
minimum: 5
}
},
description: {
string: true
},
metadata: {
object: true
}
};
/**
* OO wrapper around instances {@link http://docs.syncano.io/v0.1/docs/instances-list endpoint}.
* @constructor
* @type {Instance}
* @property {String} name
* @property {Object} owner
* @property {Number} owner.id
* @property {String} owner.email
* @property {String} owner.first_name
* @property {String} owner.last_name
* @property {Boolean} owner.is_active
* @property {Boolean} owner.has_password
* @property {String} role
* @property {Object} [metadata = {}]
* @property {String} [description = null]
* @property {String} [links = {}]
* @property {Date} [created_at = null]
* @property {Date} [updated_at = null]
*/
const Instance = stampit()
.compose(Model)
.setMeta(InstanceMeta)
.compose(Rename)
.methods({
setGlobalConfig(config = {}) {
const payload = {config};
const meta = this.getMeta();
const path = meta.resolveEndpointPath('config', this);
return this.makeRequest('PUT', path, {payload});
},
getGlobalConfig() {
const meta = this.getMeta();
const path = meta.resolveEndpointPath('config', this);
return this.makeRequest('GET', path);
}
})
.setQuerySet(InstanceQuerySet)
.setConstraints(InstanceConstraints)
export default Instance;