Source: models/instanceinvitation.js

import stampit from 'stampit';
import {Meta, Model} from './base';
import _ from 'lodash';
import {BaseQuerySet, Create, BulkCreate, Get, Delete, GetOrCreate, List} from '../querySet';

const InstanceInvitationQuerySet = stampit().compose(
  BaseQuerySet,
  Create,
  BulkCreate,
  Get,
  GetOrCreate,
  Delete,
  List,
  Delete
).methods({

  resend(properties = {}) {
    this.properties = _.assign({}, this.properties, properties);
    this.method = 'POST';
    this.endpoint = 'resend';
    return this;
  }

});

const InstanceInvitationMeta = Meta({
  name: 'instanceInvitation',
  pluralName: 'instanceInvitations',
  endpoints: {
    'detail': {
      'methods': ['delete', 'get'],
      'path': '/v1.1/instances/{instanceName}/invitations/{id}/'
    },
    'list': {
      'methods': ['post', 'get'],
      'path': '/v1.1/instances/{instanceName}/invitations/'
    },
    'resend': {
      'methods': ['post'],
      'path':  '/v1.1/instances/{instanceName}/invitations/{id}/resend/'
    }
  }
});

const InstanceInvitationConstraints = {
  email: {
    presence: true,
    email: true
  },
  role: {
    presence: true,
    inclusion: ['full', 'write', 'read']
  },
  instanceName: {
    presence: true,
    length: {
      minimum: 5
    }
  }
};

/**
 * OO wrapper around instance invitations {@link # endpoint}.
 * @constructor
 * @type {InstanceInvitation}

 * @property {String} email
 * @property {String} role
 * @property {String} [key = null]
 * @property {String} [inviter = null]
 * @property {String} [status = null]
 * @property {Number} [id = null]
 * @property {String} [description = null]
 * @property {String} [links = {}]
 * @property {Date} [created_at = null]
 * @property {Date} [updated_at = null]
 */
const InstanceInvitation = stampit()
  .compose(Model)
  .setMeta(InstanceInvitationMeta)
  .methods({

    resend() {
      const meta = this.getMeta();
      const path = meta.resolveEndpointPath('resend', this);

      return this.makeRequest('POST', path);
    }

  })
  .setQuerySet(InstanceInvitationQuerySet)
  .setConstraints(InstanceInvitationConstraints);


export default InstanceInvitation;