Source: api/issueLinkType.js

"use strict";

var errorStrings = require('./../lib/error');

module.exports = IssueLinkTypeClient;

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

    /**
     * Get a list of available issue link types, if issue linking is enabled. Each issue link type has an id, a name
     * and a label for the outward and inward link relationship.
     *
     * @method getAvailableTypes
     * @memberOf IssueLinkTypeClient#
     * @param opts The request options for the API.  Ignored in this function.
     * @param [callback] Called when the available IssueLink types are retrieved.
     * @return {Promise} Resolved when the available IssueLink types are retrieved.
     */
    this.getAvailableTypes = function (opts, callback) {
        var options = {
            uri: this.jiraClient.buildURL('/issueLinkType'),
            method: 'GET',
            json: true,
            followAllRedirects: true
        };

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

    /**
     * Create a new issue link type.
     *
     * @method createIssueLinkType
     * @memberOf IssueLinkTypeClient#
     * @param opts The request options sent to the Jira API
     * @param opts.linkType See {@link https://docs.atlassian.com/jira/REST/latest/#d2e2018}
     * @param [callback] Called when the IssueLink type has been created.
     * @return {Promise} Resolved when the IssueLink type has been created.
     */
    this.createIssueLinkType = function (opts, callback) {
        var options = {
            uri: this.jiraClient.buildURL('/issueLinkType'),
            method: 'POST',
            json: true,
            followAllRedirects: true,
            body: opts.linkType
        };

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

    /**
     * Gets for a given issue link type id all information about this issue link type.
     *
     * @method getIssueLinkType
     * @memberOf IssueLinkTypeClient#
     * @param opts The request options sent to the Jira API
     * @param opts.issueLinkTypeId The id of the IssueLink type to retrieve.
     * @param [callback] Called when the IssueLink type has been retrieved
     * @return {Promise} Resolved when the IssueLink type has been retrieved
     */
    this.getIssueLinkType = function (opts, callback) {
        if (!opts.issueLinkTypeId) {
            throw new Error(errorStrings.NO_ISSUE_LINK_TYPE_ID);
        }

        var options = {
            uri: this.jiraClient.buildURL('/issueLinkType/' + opts.issueLinkTypeId),
            method: 'GET',
            json: true,
            followAllRedirects: true
        };

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

    /**
     * Delete the specified issue link type.
     *
     * @method deleteIssueLinkType
     * @memberOf IssueLinkTypeClient#
     * @param opts The request options sent to the Jira API
     * @param opts.issueLinkTypeId The id of the IssueLink type to delete.
     * @param [callback] Called when the IssueLink type has been delete
     * @return {Promise} Resolved when the IssueLink type has been delete
     */
    this.deleteIssueLinkType = function (opts, callback) {
        if (!opts.issueLinkTypeId) {
            throw new Error(errorStrings.NO_ISSUE_LINK_TYPE_ID);
        }

        var options = {
            uri: this.jiraClient.buildURL('/issueLinkType/' + opts.issueLinkTypeId),
            method: 'DELETE',
            json: true,
            followAllRedirects: true
        };

        return this.jiraClient.makeRequest(options, callback, 'IssueLink type deleted.');
    };

    /**
     * Update the specified issue link type.
     *
     * @method editIssueLinkType
     * @memberOf IssueLinkTypeClient#
     * @param opts The request options sent to the Jira API
     * @param opts.issueLinkTypeId The id of the IssueLink type to retrieve.
     * @param opts.linkType See {@link https://docs.atlassian.com/jira/REST/latest/#d2e2071}
     * @param [callback] Called when the IssueLink type has been updated.
     * @return {Promise} Resolved when the IssueLink type has been updated.
     */
    this.editIssueLinkType = function (opts, callback) {
        if (!opts.issueLinkTypeId) {
            throw new Error(errorStrings.NO_ISSUE_LINK_TYPE_ID);
        }

        var options = {
            uri: this.jiraClient.buildURL('/issueLinkType/' + opts.issueLinkTypeId),
            method: 'PUT',
            json: true,
            followAllRedirects: true,
            body: opts.issueLinkType
        };

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