text: const Promise = require('bluebird');
  const errors = require('@tryghost/errors');
  const tpl = require('@tryghost/tpl');
  const models = require('../../models');
  
  const messages = {
      snippetNotFound: 'Snippet not found.',
      snippetAlreadyExists: 'Snippet already exists.'
  };
  
  module.exports = {
      docName: 'snippets',
  
      browse: {
          options: [
              'limit',
              'order',
              'page'
          ],
          permissions: true,
          query(frame) {
              return models.Snippet.findPage(frame.options);
          }
      },
  
      read: {
          headers: {},
          data: [
              'id'
          ],
          permissions: true,
          query(frame) {
              return models.Snippet.findOne(frame.data, frame.options)
                  .then((model) => {
                      if (!model) {
                          return Promise.reject(new errors.NotFoundError({
                              message: tpl(messages.snippetNotFound)
                          }));
                      }
  
                      return model;
                  });
          }
      },
  
      add: {
          statusCode: 201,
          headers: {},
          permissions: true,
          query(frame) {
              return models.Snippet.add(frame.data.snippets[0], frame.options)
                  .catch((error) => {
                      if (error.code && error.message.toLowerCase().indexOf('unique') !== -1) {
                          throw new errors.ValidationError({message: tpl(messages.snippetAlreadyExists)});
                      }
  
                      throw error;
                  });
          }
      },
  
      edit: {
          headers: {},
          options: [
              'id'
          ],
          validation: {
              options: {
                  id: {
                      required: true
                  }
              }
          },
          permissions: true,
          query(frame) {
              return models.Snippet.edit(frame.data.snippets[0], frame.options)
                  .then((model) => {
                      if (!model) {
                          return Promise.reject(new errors.NotFoundError({
                              message: tpl(messages.snippetNotFound)
                          }));
                      }
  
                      return model;
                  });
          }
      },
  
      destroy: {
          statusCode: 204,
          headers: {},
          options: [
              'id'
          ],
          validation: {
              options: {
                  id: {
                      required: true
                  }
              }
          },
          permissions: true,
          query(frame) {
              frame.options.require = true;
  
              return models.Snippet.destroy(frame.options)
                  .then(() => null)
                  .catch(models.Snippet.NotFoundError, () => {
                      return Promise.reject(new errors.NotFoundError({
                          message: tpl(messages.snippetNotFound)
                      }));
                  });
          }
      }
  };
  