From fe972f1141015845469bfd7feafb0c5fde588d22 Mon Sep 17 00:00:00 2001 From: yystopf Date: Wed, 8 Feb 2023 10:15:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E6=A0=87=E8=AE=B0=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/v1/issues/issue_tags_controller.rb | 27 +++++++++++++++++++ .../issue_tags/_simple_detail.json.jbuilder | 1 + .../v1/issues/issue_tags/index.json.jbuilder | 6 +++++ config/routes/api.rb | 1 + 4 files changed, 35 insertions(+) create mode 100644 app/controllers/api/v1/issues/issue_tags_controller.rb create mode 100644 app/views/api/v1/issues/issue_tags/_simple_detail.json.jbuilder create mode 100644 app/views/api/v1/issues/issue_tags/index.json.jbuilder 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'