Source: core/ContentGroup.js

const BaaS = require('./baas')
const BaseQuery = require('./BaseQuery')
const Query = require('./Query')

/**
 * 内容库
 * @memberof BaaS
 * @extends BaaS.BaseQuery
 * @public
 */
class ContentGroup extends BaseQuery {
  /**
   * @param {string} contentGroupID 内容库 ID
   */
  constructor(contentGroupID) {
    super()
    this._contentGroupID = contentGroupID
  }

  /**
   * 获取内容库详情。
   * @param {string} id 内容库 ID
   * @return {Promise<BaaS.Response<any>>}
   */
  static get(id) {
    return BaaS.getContentGroup({contentGroupID: id})
  }

  /**
   * 获取内容库列表。
   * @param {object} [options] 内容库 ID
   * @return {Promise<BaaS.Response<any>>}
   */
  static find({offset = 0, limit = 20, withCount = false} = {}) {
    return BaaS.getContentGroupList({offset, limit, return_total_count: withCount ? 1 : 0})
  }

  /**
   * 获取内容。
   * @method
   * @param {string} richTextID 内容 ID
   * @return {Promise<BaaS.Response<any>>}
   */  
  getContent(richTextID) {
    let params = {richTextID}
    if (this._expand) {
      params.expand = this._expand
    }

    if (this._keys) {
      params.keys = this._keys
    }
    this._initQueryParams()
    return BaaS.getContent(params)
  }

  /**
   * 查找内容。
   * @method
   * @param {BaaS.FindOptions} [options] 参数
   * @return {Promise<BaaS.Response<any>>}
   */
  find({withCount = false} = {}) {
    let condition = this._handleAllQueryConditions()
    condition.contentGroupID = this._contentGroupID
    this._initQueryParams()
    return BaaS.getContentListV2(Object.assign({}, condition, {
      return_total_count: withCount ? 1 : 0,
    }))
  }

  /**
   * 获取内容数量。
   * @method
   * @since v3.0.0
   * @return {Promise<number>}
   */
  count() {
    return this.limit(1).find({withCount: true}).then(res => {
      let {total_count} = res.data.meta
      return total_count
    })
  }

  /**
   * 获取内容分类列表。
   * @method
   * @param {BaaS.FindOptions} [options] 参数
   * @return {Promise<BaaS.Response<any>>}
   */
  getCategoryList({withCount = false} = {}) {
    return BaaS.getContentCategoryList({
      contentGroupID: this._contentGroupID,
      limit: 100,
      return_total_count: withCount ? 1 : 0,
    })
  }

  /**
   * 获取内容分类详情。
   * @method
   * @return {Promise<BaaS.Response<any>>}
   */
  getCategory(categoryID) {
    let query = new Query()
    query.compare('group_id', '=', this._contentGroupID)
    return BaaS.getContentCategory({categoryID, where: JSON.stringify(query.queryObject)})
  }
}

module.exports = ContentGroup