# Source: api/reindex.js

    "use strict";

    module.exports = ReindexClient;

    /**
     * Used to access Jira REST endpoints in '/rest/api/2/reindex'
     *
     * @param {JiraClient} jiraClient
     * @constructor ReindexClient
     */
    function ReindexClient(jiraClient) {
        this.jiraClient = jiraClient;

        /**
         * Kicks off a reindex. Need Admin permissions to perform this reindex.
         *
         * @method doReindex
         * @memberOf ReindexClient#
         * @param opts The request options sent to the Jira API.
         * @param {string} [opts.type] Case insensitive String indicating type of reindex. If omitted, then defaults to
         *     BACKGROUND_PREFERRED
         * @param {boolean} [opts.indexComments=false] Indicates that comments should also be reindexed. Not relevant for
         *     foreground reindex, where comments are always reindexed.
         * @param {boolean} [opts.indexChangeHistory=false] Indicates that changeHistory should also be reindexed. Not
         *     relevant for foreground reindex, where changeHistory is always reindexed.
         * @param callback Called when the reindex has been started.
         */
        this.doReindex = function (opts, callback) {
            var options = {
                uri: this.jiraClient.buildURL('/reindex'),
                method: 'POST',
                json: true,
                followAllRedirects: true,
                qs: {
                    type: opts.type,
                    indexComments: opts.indexComments,
                    indexChangeHistory: opts.indexChangeHistory
                }
            };

            this.jiraClient.makeRequest(options, callback);
        };

        /**
         * Gets information on the system reindexes. If a reindex is currently taking place then information about this
         * reindex is returned. If there is no active index task, then returns information about the latest reindex task
         * run, otherwise returns a 404 indicating that no reindex has taken place.
         *
         * @method getReindex
         * @memberOf ReindexClient#
         * @param opts The request options sent to the Jira API.
         * @param [opts.taskId] The id of an indexing task you wish to obtain details on. If omitted, then defaults to the
         *     standard behaviour and returns information on the active reindex task, or the last task to run if no reindex
         *     is taking place. . If there is no reindexing task with that id then a 404 is returned.
         * @param callback Called when the reindex data has been retrieved.
         */
        this.getReindex = function (opts, callback) {
            var options = {
                uri: this.jiraClient.buildURL('/reindex'),
                method: 'GET',
                json: true,
                followAllRedirects: true,
                qs: {
                    taskId: opts.taskId
                }
            };

            this.jiraClient.makeRequest(options, callback);
        }
    }