pomeo/node-insales

View on GitHub
lib/api/asset.js

Summary

Maintainability
C
1 day
Test Coverage
import { get } from '../methods/get';
import { post } from '../methods/post';
import { remove } from '../methods/remove';
import { put } from '../methods/put';

/**
 * GET /admin/themes/#{theme_id}/assets.xml
 *
 * Examples:
 *
 *      insales.listAsset({
 *        token: '1234567890',
 *        url: 'shop-test.myinsales.ru',
 *        theme: '643879'
 *      }).then(response => {
 *        console.info(response.data);
 *      }).catch(err => {
 *        console.error(err);
 *      });
 * Output:
 *
 *      { 'assets':
 *         { 'asset':
 *            [ { id: '60410193',
 *                'theme-id': '643879',
 *                type: 'Asset::Template',
 *                name: 'order.liquid',
 *                'content-type': 'text/x-liquid',
 *                'file-size': '5125',
 *                'human-readable-name': 'Карточка заказа' }
 *             ]}};
 * @param {Object} options
 * @param {string} options.token Required, access token for shop
 * @param {string} options.url Required, shop url
 * @param {Number|String} options.theme Required, theme id
 * @param {Number|String} id Required, app id
 * @returns {Promise}
 */
export function listAsset(options, id) {
  return get({
    id,
    token: options.token,
    url: options.url,
    api: `themes/${options.theme}/assets`
  });
}

/**
 * GET /admin/themes/#{theme_id}/assets/#{id}.xml
 *
 * Examples:
 *
 *      insales.getAsset({
 *        token: '1234567890',
 *        url: 'shop-test.myinsales.ru',
 *        theme: '643879',
 *        assetId: '60423000'
 *      }).then(response => {
 *        console.info(response.data);
 *      }).catch(err => {
 *        console.error(err);
 *      });
 * Output:
 *
 *      {{ asset:
 *         { id: '60423000',
 *           'theme-id': '643879',
 *           type: 'Asset::Template',
 *           name: 'page.new_page.liquid',
 *           'content-type': 'text/x-liquid',
 *           'file-size': '0',
 *           'human-readable-name': 'Страница: new_page',
 *           content: 'new page {{ page.title }}' } }
 * @param {Object} options
 * @param {string} options.token Required, access token for shop
 * @param {string} options.url Required, shop url
 * @param {Number|String} options.theme Required, theme id
 * @param {Number|String} options.assetId Required, asset id
 * @param {Number|String} id Required, app id
 * @returns {Promise}
 */
export function getAsset(options, id) {
  return get({
    id,
    token: options.token,
    url: options.url,
    api: `themes/${options.theme}/assets/${options.assetId}`
  });
}

/**
 * GET /admin/themes/#{theme_id}/assets/#{id}/raw.xml
 *
 * Examples:
 *
 *      insales.getAssetRaw({
 *        token: '1234567890',
 *        url: 'shop-test.myinsales.ru',
 *        theme: '643879',
 *        assetId: '60423000'
 *      }).then(response => {
 *        console.info(response.data);
 *      }).catch(err => {
 *        console.error(err);
 *      });
 * Output:
 *
 *      // Исходный код ассета
 * @param {Object} options
 * @param {string} options.token Required, access token for shop
 * @param {string} options.url Required, shop url
 * @param {Number|String} options.theme Required, theme id
 * @param {Number|String} options.assetId Required, asset id
 * @param {Number|String} id Required, app id
 * @returns {Promise}
 */
export function getAssetRaw(options, id) {
  return get({
    id,
    token: options.token,
    url: options.url,
    api: `themes/${options.theme}/assets/${options.assetId}/raw`
  });
}

/**
 * PUT /admin/themes/#{theme_id}/assets/#{id}.xml
 *
 * Examples:
 *
 *      insales.editAsset({
 *        token: '1234567890',
 *        url: 'shop-test.myinsales.ru',
 *        theme: '643879',
 *        assetId: '60423000',
 *        asset: {
 *          content: 'Amazing template for page {{product.title}}'
 *        }
 *      }).then(output => {
 *        console.info(output.response.statusCode);
 *      }).catch(err => {
 *        console.error(err);
 *      });
 * Output:
 *
 *      { asset:
 *        { id: '60423000',
 *          'theme-id': '643879',
 *          type: 'Asset::Template',
 *          name: 'page.new_page.liquid',
 *          'content-type': 'text/x-liquid',
 *          'file-size': '52',
 *          'human-readable-name': 'Страница: new_page' } }
 * @param {Object} options
 * @param {string} options.token Required, access token for shop
 * @param {string} options.url Required, shop url
 * @param {Object} options.asset Required, asset content
 * @param {Number|String} options.theme Required, theme id
 * @param {Number|String} options.assetId Required, asset id
 * @param {Number|String} id Required, app id
 * @returns {Promise}
 */
export function editAsset(options, id) {
  return put({
    id,
    token: options.token,
    url: options.url,
    api: `themes/${options.theme}/assets/${options.assetId}`,
    obj: {
      asset: options.asset
    }
  });
}

/**
 * PUT /admin/themes/#{theme_id}/assets/#{id}/rename.xml
 *
 * Examples:
 *
 *      insales.renameAsset({
 *        token: '1234567890',
 *        url: 'shop-test.myinsales.ru',
 *        theme: '643879',
 *        assetId: '60423000',
 *        assets: {
 *          'asset': {
 *            'new_name': 'page.amazing_new_page.liquid'
 *          }
 *        }
 *      }).then(output => {
 *        console.info(output.response.statusCode);
 *      }).catch(err => {
 *        console.error(err);
 *      });
 * Output:
 *
 *      { asset:
 *        { id: '60423000',
 *          'theme-id': '643879',
 *          type: 'Asset::Template',
 *          name: 'page.amazing_new_page.liquid',
 *          'content-type': 'text/x-liquid',
 *          'file-size': '42',
 *          'human-readable-name': 'Страница: amazing_new_page' } }
 * @param {Object} options
 * @param {string} options.token Required, access token for shop
 * @param {string} options.url Required, shop url
 * @param {Object} options.assets Required, asset new_name
 * @param {Number|String} options.theme Required, theme id
 * @param {Number|String} options.assetId Required, asset id
 * @param {Number|String} id Required, app id
 * @returns {Promise}
 */
export function renameAsset(options, id) {
  return put({
    id,
    token: options.token,
    url: options.url,
    api: `themes/${options.theme}/assets/${options.assetId}/rename`,
    obj: options.assets
  });
}

/**
 * POST /admin/themes/#{theme_id}/assets.xml
 *
 * Examples:
 *
 *      insales.uploadAsset({
 *        token: '1234567890',
 *        url: 'shop-test.myinsales.ru',
 *        theme: '643879',
 *        asset: {
 *           'name': 'logo.png',
 *           'src': 'http://www.insales.ru/assets/images/content/logo.png',
 *           'type': 'Asset::Media'
 *           }
 *      }).then(output => {
 *        console.info(output.data);
 *      }).catch(err => {
 *        console.error(err);
 *      });
 * Output:
 *
 *      { asset:
 *         { id: '60374631',
 *           'theme-id': '643879',
 *           type: 'Asset::Media',
 *           name: 'logo.png',
 *           'content-type': 'image/jpeg',
 *           'file-size': '71373',
 *           'human-readable-name': 'logo.png',
 *             asset_url: '/assets/1/4903/643879/v_1467231594/logo.png?1467234697' } }
 * @param {Object} options
 * @param {string} options.token Required, access token for shop
 * @param {string} options.url Required, shop url
 * @param {Number|String} options.theme Required, theme id
 * @param {Number|String} id Required, app id
 * @param {object} options.asset Required, asset property
 * @returns {Promise}
 */
export function uploadAsset(options, id) {
  return post({
    id,
    token: options.token,
    url: options.url,
    api: `themes/${options.theme}/assets`,
    obj: {
      asset: options.asset
    }
  });
}

/**
 * DELETE /admin/themes/#{theme_id}/assets/#{id}.xml
 *
 * Examples:
 *
 *      insales.removeAsset({
 *        token: '1234567890',
 *        url: 'shop-test.myinsales.ru',
 *          theme: '643879',
 *          assetId: '60423000'
 *      }).then(output => {
 *        console.info(output.response.statusCode);
 *      }).catch(err => {
 *        console.error(err);
 *      });
 * Output:
 *
 *      200
 * @param {Object} options
 * @param {string} options.token Required, access token for shop
 * @param {string} options.url Required, shop url
 * @param {Number|String} options.theme Required, theme id
 * @param {Number|String} options.assetId Required, asset id
 * @param {Number|String} id Required, app id
 * @returns {Promise}
 */
export function removeAsset(options, id) {
  return remove({
    id,
    token: options.token,
    url: options.url,
    api: `themes/${options.theme}/assets/${options.assetId}`
  });
}