diff --git a/app/controllers/api/v1/base_controller.rb b/app/controllers/api/v1/base_controller.rb index b937d798e..771adcc05 100644 --- a/app/controllers/api/v1/base_controller.rb +++ b/app/controllers/api/v1/base_controller.rb @@ -20,10 +20,19 @@ class Api::V1::BaseController < ApplicationController # User.find(doorkeeper_token.resource_owner_id) if doorkeeper_token # end # end + + def kaminary_select_paginate(relation) + limit = params[:limit] || params[:per_page] + limit = (limit.to_i.zero? || limit.to_i > 100) ? 100 : limit.to_i + page = params[:page].to_i.zero? ? 1 : params[:page].to_i + + relation.page(page).per(limit) + end def limit params.fetch(:limit, 15) end + def page params.fetch(:page, 1) end diff --git a/app/controllers/api/v1/issues/authors_controller.rb b/app/controllers/api/v1/issues/authors_controller.rb new file mode 100644 index 000000000..8c7a4f7e6 --- /dev/null +++ b/app/controllers/api/v1/issues/authors_controller.rb @@ -0,0 +1,9 @@ +class Api::V1::Issues::AuthorsController < Api::V1::BaseController + before_action :require_public_and_member_above, only: [:index] + + # 发布人列表 + def index + @authors = User.joins(issues: :project).where(projects: {id: @project&.id}) + @authors = kaminary_select_paginate(@authors) + end +end \ No newline at end of file diff --git a/app/controllers/api/v1/issues/statues_controller.rb b/app/controllers/api/v1/issues/statues_controller.rb new file mode 100644 index 000000000..0e9eff43f --- /dev/null +++ b/app/controllers/api/v1/issues/statues_controller.rb @@ -0,0 +1,10 @@ +class Api::V1::Issues::StatuesController < Api::V1::BaseController + + before_action :require_public_and_member_above, only: [:index] + + # 状态列表 + def index + @statues = IssueStatus.order("position asc") + @statues = kaminary_select_paginate(@statues) + end +end \ No newline at end of file diff --git a/app/views/api/v1/projects/issues/_simple_detail.json.jbuilder b/app/views/api/v1/issues/_simple_detail.json.jbuilder similarity index 100% rename from app/views/api/v1/projects/issues/_simple_detail.json.jbuilder rename to app/views/api/v1/issues/_simple_detail.json.jbuilder diff --git a/app/views/api/v1/issues/authors/index.json.jbuilder b/app/views/api/v1/issues/authors/index.json.jbuilder new file mode 100644 index 000000000..dd1a4174a --- /dev/null +++ b/app/views/api/v1/issues/authors/index.json.jbuilder @@ -0,0 +1,4 @@ +json.total_count @authors.total_count +json.authors @authors.each do |author| + json.partial! 'api/v1/users/simple_user', locals: { user: author} +end \ No newline at end of file diff --git a/app/views/api/v1/issues/statues/index.json.jbuilder b/app/views/api/v1/issues/statues/index.json.jbuilder new file mode 100644 index 000000000..2cc91fb52 --- /dev/null +++ b/app/views/api/v1/issues/statues/index.json.jbuilder @@ -0,0 +1,4 @@ +json.total_count @statues.total_count +json.statues @statues.each do |status| + json.(status, :id, :name) +end \ No newline at end of file diff --git a/config/routes/api.rb b/config/routes/api.rb index 19531526e..fac227d73 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -28,6 +28,13 @@ defaults format: :json do # projects文件夹下的 scope module: :projects do resources :issues + scope module: :issues do + 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' + resources :issue_assigners, only: [:index], controller: '/api/v1/issues/assigners' + end + resources :pulls, module: 'pulls' do resources :versions, only: [:index] do member do @@ -38,7 +45,6 @@ defaults format: :json do resources :reviews, only: [:index, :create] end - resources :versions resources :release_versions resources :webhooks do member do