diff --git a/app/controllers/api/v1/issues/issue_tags_controller.rb b/app/controllers/api/v1/issues/issue_tags_controller.rb new file mode 100644 index 000000000..2b03c94fe --- /dev/null +++ b/app/controllers/api/v1/issues/issue_tags_controller.rb @@ -0,0 +1,27 @@ +class Api::V1::Issues::IssueTagsController < Api::V1::BaseController + + before_action :require_public_and_member_above, only: [:index] + + def index + @issue_tags = @project.issue_tags.order("#{order_by} #{order_direction}") + if params[:only_name] + @issue_tags = kaminary_select_paginate(@issue_tags.select(:id, :name)) + else + @issue_tags = kaminari_paginate(@issue_tags) + end + end + + + private + def order_by + order_by = params.fetch(:order_by, "created_at") + order_by = IssueTag.column_names.include?(order_by) ? order_by : "created_at" + order_by + end + + def order_direction + order_direction = params.fetch(:order_direction, "desc").downcase + order_direction = %w(desc asc).include?(order_direction) ? order_direction : "desc" + order_direction + end +end \ No newline at end of file diff --git a/app/views/api/v1/issues/issue_tags/_simple_detail.json.jbuilder b/app/views/api/v1/issues/issue_tags/_simple_detail.json.jbuilder new file mode 100644 index 000000000..f0826fab7 --- /dev/null +++ b/app/views/api/v1/issues/issue_tags/_simple_detail.json.jbuilder @@ -0,0 +1 @@ +json.(tag, :id, :name) \ No newline at end of file diff --git a/app/views/api/v1/issues/issue_tags/index.json.jbuilder b/app/views/api/v1/issues/issue_tags/index.json.jbuilder new file mode 100644 index 000000000..548cd1b40 --- /dev/null +++ b/app/views/api/v1/issues/issue_tags/index.json.jbuilder @@ -0,0 +1,6 @@ +json.total_count @issue_tags.total_count +json.issue_tags @issue_tags.each do |tag| + if params[:only_name] + json.partial! "simple_detail", locals: {tag: tag} + end +end \ No newline at end of file diff --git a/config/routes/api.rb b/config/routes/api.rb index fac227d73..6c262ddd0 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -29,6 +29,7 @@ defaults format: :json do scope module: :projects do resources :issues scope module: :issues do + resources :issue_tags, only: [:index] resources :milestones, except: [:new, :edit] resources :issue_statues, only: [:index], controller: '/api/v1/issues/statues' resources :issue_authors, only: [:index], controller: '/api/v1/issues/authors'