horizon/resources/reviewable_requests.js

import { ResourceGroupBase } from '../../resource_group_base'
import { SUBMIT_TRANSACTION_TIMEOUT } from '../constants'

const resourceType = 'reviewable_requests'

/**
 * ReviewableRequests.
 *
 * @class
 */
export class ReviewableRequests extends ResourceGroupBase {
  /**
   * Get reviewable requests.
   *
   * @param {object} [query] Request options.
   * @param {Number} [query.page.number] Page number.
   * @param {Number} [query.page.size] Page size.
   * @param {string[]} [query.sort] Sorting params.
   * @param {string} [query.requestor] Requestor of the request.
   * @param {reviewer} [query.reviewer] Reviewer of the request.
   * @param {string} [query.type] Type of the request.
   *
   * @return {Promise.<JsonApiResponse>}
   */
  getPage (query) {
    return this
      ._makeCallBuilder()
      .get(query)
  }

  /**
   * Get a reviewable request by id
   * @param requestId
   * @param {object} [query] Request options.
   *
   * @return {Promise.<JsonApiResponse>}
   */
  get (requestId, query) {
    return this
      ._makeRequestCallBuilder(requestId)
      .get(query)
  }

  /**
   * Manage a reviewable request.
   *
   * @param {string} requestId Reviewable request ID.
   * @param {string} hash Reviewable request hash.
   * @param {string} state The new state of the request.
   * @param {string} [rejectReason] The reason why the request was rejected.
   *
   * @return {Promise.<JsonApiResponse>}
   */
  manage (requestId, hash, state, rejectReason) {
    return this._makeRequestCallBuilder(requestId)
      .withCredentials()
      .withTimeout(SUBMIT_TRANSACTION_TIMEOUT)
      .patch({
        data: {
          type: resourceType,
          id: requestId,
          attributes: {
            hash,
            state,
            rejectReason
          }
        }
      })
  }

  /**
   * Cancel a reviewable request.
   *
   * @param {string} requestId Reviewable request ID.
   *
   * @return {Promise.<JsonApiResponse>}
   */
  cancel (requestId) {
    return this._makeRequestCallBuilder(requestId)
      .withCredentials()
      .withTimeout(SUBMIT_TRANSACTION_TIMEOUT)
      .delete()
  }

  _makeCallBuilder () {
    return this._server
      ._makeCallBuilder()
      .appendUrlSegment('requests')
  }

  _makeRequestCallBuilder (requestId) {
    return this._makeCallBuilder().appendUrlSegment(requestId)
  }
}