Home Reference Source

src/api/NewReleaseCategoryFetcher.js

import { NEW_RELEASE_CATEGORIES as ENDPOINT } from '../Endpoint';
import Fetcher from './Fetcher';

/**
 * List categories of new release albums.
 * @see https://docs-en.kkbox.codes/v1.1/reference#new-release-categories
 */
export default class NewReleaseCategoryFetcher extends Fetcher {
  /**
   * @ignore
   */
  constructor(http, territory = 'TW') {
    super(http, territory);

    /**
     * @ignore
     */
    this.categoryID = undefined;
  }

  /**
   * Fetch all new release categories.
   *
   * @param {number} [limit] - The size of one page.
   * @param {number} [offset] - The offset index for first element.
   * @return {Promise}
   * @example api.newReleaseCategoryFetcher.fetchAllNewReleaseCategories();
   * @see https://docs-en.kkbox.codes/v1.1/reference#newreleasecategories
   */
  fetchAllNewReleaseCategories(limit = undefined, offset = undefined) {
    return this.http.get(ENDPOINT, {
      limit: limit,
      offset: offset,
      territory: this.territory
    });
  }

  /**
   * Init the new release category fetcher.
   *
   * @param {string} categoryID - The category ID.
   * @return {NewReleaseCategoryFetcher}
   * @see https://docs-en.kkbox.codes/v1.1/reference#newreleasecategories-category_id
   */
  setCategoryID(categoryID) {
    this.categoryID = categoryID;
    return this;
  }

  /**
   * Fetch metadata of the new release category you set.
   *
   * @return {Promise}
   * @example api.newReleaseCategoryFetcher.setCategoryID('Cng5IUIQhxb8w1cbsz').fetchMetadata();
   * @see https://docs-en.kkbox.codes/v1.1/reference#newreleasecategories-category_id
   */
  fetchMetadata() {
    return this.http.get(ENDPOINT + '/' + this.categoryID, {
      territory: this.territory
    });
  }

  /**
   * Fetch albums of the new release category with the category fetcher you init. Result will be paged.
   *
   * @param {number} [limit] - The size of one page.
   * @param {number} [offset] - The offset index for first element.
   * @return {Promise}
   * @example api.newReleaseCategoryFetcher.setCategoryID('Cng5IUIQhxb8w1cbsz').fetchAlbums();
   * @see https://docs-en.kkbox.codes/v1.1/reference#newreleasecategories-category_id-albums
   */
  fetchAlbums(limit = undefined, offset = undefined) {
    return this.http.get(ENDPOINT + '/' + this.categoryID + '/albums', {
      territory: this.territory,
      limit: limit,
      offset: offset
    });
  }
}