Source: models/schedule.js

import stampit from 'stampit';
import {Meta, Model} from './base';

const ScheduleMeta = Meta({
  name: 'schedule',
  pluralName: 'schedules',
  endpoints: {
    'detail': {
      'methods': ['delete', 'patch', 'put', 'get'],
      'path': '/v1.1/instances/{instanceName}/schedules/{id}/'
    },
    'list': {
      'methods': ['post', 'get'],
      'path': '/v1.1/instances/{instanceName}/schedules/'
    }
  },
  relatedModels: [ 'ScheduleTrace' ]
});


const ScheduleConstraints = {
  instanceName: {
    presence: true,
    length: {
      minimum: 5
    }
  },
  label: {
    presence: true,
    string: true
  },
  description: {
    string: true
  },
  interval_sec: {
    numericality: true
  },
  crontab: {
    string: true
  },
  timezone: {
    string: true
  },
  script: {
    presence: true,
    numericality: true
  }
};

/**
 * OO wrapper around instance groups {@link http://docs.syncano.com/v4.0/docs/codebox-schedules-list endpoint}.
 * @constructor
 * @type {Schedule}

 * @property {Number} id
 * @property {String} instanceName
 * @property {String} label
 * @property {Number} interval_sec
 * @property {String} crontab
 * @property {Object} payload
 * @property {String} scheduled_next
 * @property {String} [links = {}]
 * @property {Date} [created_at = null]
 * @property {Date} [updated_at = null]
 */
const Schedule = stampit()
  .compose(Model)
  .setMeta(ScheduleMeta)
  .setConstraints(ScheduleConstraints);

export default Schedule;