summaryrefslogtreecommitdiff
path: root/lib/api/labels.rb
blob: aa3746dae42dbe33e1b1f2e5582b2c7cbae6642f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# frozen_string_literal: true

module API
  class Labels < ::API::Base
    include PaginationParams
    helpers ::API::Helpers::LabelHelpers

    before { authenticate! }

    feature_category :issue_tracking

    LABEL_ENDPOINT_REQUIREMENTS = API::NAMESPACE_OR_PROJECT_REQUIREMENTS.merge(
      name: API::NO_SLASH_URL_PART_REGEX,
      label_id: API::NO_SLASH_URL_PART_REGEX)

    params do
      requires :id, type: String, desc: 'The ID of a project'
    end
    resource :projects, requirements: LABEL_ENDPOINT_REQUIREMENTS do
      desc 'Get all labels of the project' do
        success Entities::ProjectLabel
      end
      params do
        optional :with_counts, type: Boolean, default: false,
                 desc: 'Include issue and merge request counts'
        optional :include_ancestor_groups, type: Boolean, default: true,
                 desc: 'Include ancestor groups'
        optional :search, type: String,
                 desc: 'Keyword to filter labels by. This feature was added in GitLab 13.6'
        use :pagination
      end
      get ':id/labels' do
        get_labels(user_project, Entities::ProjectLabel, declared_params)
      end

      desc 'Get a single label' do
        detail 'This feature was added in GitLab 12.4.'
        success Entities::ProjectLabel
      end
      params do
        optional :include_ancestor_groups, type: Boolean, default: true,
                 desc: 'Include ancestor groups'
      end
      get ':id/labels/:name' do
        get_label(user_project, Entities::ProjectLabel, declared_params)
      end

      desc 'Create a new label' do
        success Entities::ProjectLabel
      end
      params do
        use :label_create_params
        optional :priority, type: Integer, desc: 'The priority of the label', allow_blank: true
      end
      post ':id/labels' do
        create_label(user_project, Entities::ProjectLabel)
      end

      desc 'Update an existing label. At least one optional parameter is required.' do
        detail 'This feature was deprecated in GitLab 12.4.'
        success Entities::ProjectLabel
      end
      params do
        optional :label_id, type: Integer, desc: 'The ID of the label to be updated'
        optional :name, type: String, desc: 'The name of the label to be updated'
        use :project_label_update_params
        exactly_one_of :label_id, :name
      end
      put ':id/labels' do
        update_label(user_project, Entities::ProjectLabel)
      end

      desc 'Delete an existing label' do
        detail 'This feature was deprecated in GitLab 12.4.'
        success Entities::ProjectLabel
      end
      params do
        optional :label_id, type: Integer, desc: 'The ID of the label to be deleted'
        optional :name, type: String, desc: 'The name of the label to be deleted'
        exactly_one_of :label_id, :name
      end
      delete ':id/labels' do
        delete_label(user_project)
      end

      desc 'Promote a label to a group label' do
        detail 'This feature was added in GitLab 12.3 and deprecated in GitLab 12.4.'
        success Entities::GroupLabel
      end
      params do
        requires :name, type: String, desc: 'The name of the label to be promoted'
      end
      put ':id/labels/promote' do
        promote_label(user_project)
      end

      desc 'Update an existing label. At least one optional parameter is required.' do
        detail 'This feature was added in GitLab 12.4.'
        success Entities::ProjectLabel
      end
      params do
        requires :name, type: String, desc: 'The name or id of the label to be updated'
        use :project_label_update_params
      end
      put ':id/labels/:name' do
        update_label(user_project, Entities::ProjectLabel)
      end

      desc 'Delete an existing label' do
        detail 'This feature was added in GitLab 12.4.'
        success Entities::ProjectLabel
      end
      params do
        requires :name, type: String, desc: 'The name or id of the label to be deleted'
      end
      delete ':id/labels/:name' do
        delete_label(user_project)
      end

      desc 'Promote a label to a group label' do
        detail 'This feature was added in GitLab 12.4.'
        success Entities::GroupLabel
      end
      params do
        requires :name, type: String, desc: 'The name or id of the label to be promoted'
      end
      put ':id/labels/:name/promote' do
        promote_label(user_project)
      end
    end
  end
end