From 36a659678d15bfa6f6a91193311f9bce51846d1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=91=B1=E5=91=B1=E5=91=B1?= Date: Wed, 1 Nov 2023 10:42:27 +0800 Subject: [PATCH] gm issue --- app/controllers/api/pm/issues_controller.rb | 79 +++++++++++++++++++ .../api/v1/issues/concerns/checkable.rb | 1 + app/services/api/v1/issues/create_service.rb | 2 + app/services/api/v1/issues/list_service.rb | 13 ++- app/views/api/v1/issues/_detail.json.jbuilder | 6 +- app/views/api/v1/issues/index.json.jbuilder | 2 +- .../api/v1/pm_issues/create.json.jbuilder | 1 - config/routes/api.rb | 6 +- 8 files changed, 104 insertions(+), 6 deletions(-) create mode 100644 app/controllers/api/pm/issues_controller.rb delete mode 100644 app/views/api/v1/pm_issues/create.json.jbuilder diff --git a/app/controllers/api/pm/issues_controller.rb b/app/controllers/api/pm/issues_controller.rb new file mode 100644 index 000000000..9e9bbde2d --- /dev/null +++ b/app/controllers/api/pm/issues_controller.rb @@ -0,0 +1,79 @@ +class Api::Pm::IssuesController < ApplicationController + before_action :require_login, except: [:index] + before_action :load_issue, only: [:show, :children, :update, :destroy] + def index + @project = Project.find_by_id(params[:project_id]) || Project.new(id: 0, user_id: 0, name: 'pm_mm', identifier: 'pm_mm') + @object_result = Api::V1::Issues::ListService.call(@project, query_params, current_user) + @total_issues_count = @object_result[:total_issues_count] + @opened_issues_count = @object_result[:opened_issues_count] + @closed_issues_count = @object_result[:closed_issues_count] + if params[:only_name].present? + @issues = kaminary_select_paginate( + @object_result[:data].select(:id, :subject, :project_issues_index, :updated_on, :created_on)) + else + @issues = kaminari_paginate(@object_result[:data]) + end + render "api/v1/issues/index" + end + + def show + @issue.associate_attachment_container + render "api/v1/issues/show" + end + + def create + project = Project.find_by_id(params[:project_id]) || Project.new(id: 0, user_id: 0, name: 'pm_mm', identifier: 'pm_mm') + @object_result = Api::V1::Issues::CreateService.call(project, issue_params, current_user) + render "api/v1/issues/create" + end + + def update + @object_result = Api::V1::Issues::UpdateService.call(@project, @issue, issue_params, current_user) + end + + def destroy + @object_result = Api::V1::Issues::DeleteService.call(@project, @issue, current_user) + if @object_result + render_ok + else + render_error('删除疑修失败!') + end + end + private + def load_issue + @project = Project.new(id: params[:project_id], user_id: 0, name: 'pm_mm', identifier: 'pm_mm') + @issue = @project.issues.issue_issue.where(pm_project_id: params[:pm_project_id], pm_sprint_id:params[:pm_sprint_id]).find_by_id(params[:id]) + if @issue.blank? + render_not_found("疑修不存在!") + end + end + + def query_params + params.permit( + :only_name, + :category, + :participant_category, + :keyword, :author_id, + :milestone_id, :assigner_id, + :status_id, + :begin_date, :end_date, + :sort_by, :sort_direction,:parent_id, + :issue_tag_ids, :pm_project_id, :pm_sprint_id, :pm_issue_type + ) + end + + + + def issue_params + params.permit( + :status_id, :priority_id, :milestone_id, + :branch_name, :start_date, :due_date, + :subject, :description, :blockchain_token_num, + :pm_project_id, :pm_sprint_id, :pm_issue_type, :parent_id, + issue_tag_ids: [], + assigner_ids: [], + attachment_ids: [], + receivers_login: [] + ) + end +end diff --git a/app/services/api/v1/issues/concerns/checkable.rb b/app/services/api/v1/issues/concerns/checkable.rb index b19c245ed..d3cc4741d 100644 --- a/app/services/api/v1/issues/concerns/checkable.rb +++ b/app/services/api/v1/issues/concerns/checkable.rb @@ -47,6 +47,7 @@ module Api::V1::Issues::Concerns::Checkable end def check_blockchain_token_num(user_id, project_id, blockchain_token_num, now_blockchain_token_num=0) + return if project_id.zero? left_blockchain_token_num = Blockchain::BalanceQueryOneProject.call({"user_id": user_id, "project_id": project_id}) rescue 0 raise ApplicationService::Error, "用户Token不足。" if blockchain_token_num.to_i > (left_blockchain_token_num+now_blockchain_token_num).to_i end diff --git a/app/services/api/v1/issues/create_service.rb b/app/services/api/v1/issues/create_service.rb index a5dc3d88e..64a42b20d 100644 --- a/app/services/api/v1/issues/create_service.rb +++ b/app/services/api/v1/issues/create_service.rb @@ -32,6 +32,7 @@ class Api::V1::Issues::CreateService < ApplicationService @pm_project_id = params[:pm_project_id] @pm_sprint_id = params[:pm_sprint_id] @pm_issue_type = params[:pm_issue_type] + @parent_id = params[:parent_id] end def call @@ -62,6 +63,7 @@ class Api::V1::Issues::CreateService < ApplicationService @created_issue.pm_project_id = @pm_project_id @created_issue.pm_sprint_id = @pm_sprint_id @created_issue.pm_issue_type = @pm_issue_type + @created_issue.parent_id = @parent_id @created_issue.issue_tags_value = @issue_tags.order("id asc").pluck(:id).join(",") unless issue_tag_ids.blank? @created_issue.save! diff --git a/app/services/api/v1/issues/list_service.rb b/app/services/api/v1/issues/list_service.rb index 862524bf3..5e442c01f 100644 --- a/app/services/api/v1/issues/list_service.rb +++ b/app/services/api/v1/issues/list_service.rb @@ -4,7 +4,7 @@ class Api::V1::Issues::ListService < ApplicationService attr_reader :project, :only_name, :category, :participant_category, :keyword, :author_id, :issue_tag_ids attr_reader :begin_date, :end_date attr_reader :milestone_id, :assigner_id, :status_id, :sort_by, :sort_direction, :current_user - attr_reader :pm_project_id, :pm_sprint_id + attr_reader :pm_project_id, :pm_sprint_id, :parent_id, :pm_issue_type attr_accessor :queried_issues, :total_issues_count, :closed_issues_count, :opened_issues_count validates :category, inclusion: {in: %w(all opened closed), message: "请输入正确的Category"} @@ -29,6 +29,8 @@ class Api::V1::Issues::ListService < ApplicationService @sort_by = params[:sort_by].present? ? params[:sort_by] : 'issues.updated_on' @pm_project_id = params[:pm_project_id] @pm_sprint_id = params[:pm_sprint_id] + @parent_id = params[:parent_id] + @pm_issue_type = params[:pm_issue_type] @sort_direction = (params[:sort_direction].present? ? params[:sort_direction] : 'desc').downcase @current_user = current_user end @@ -64,10 +66,17 @@ class Api::V1::Issues::ListService < ApplicationService # issue_tag_ids issues = issues.ransack(issue_tags_value_cont: issue_tag_ids.sort!.join(",")).result unless issue_tag_ids.blank? - + # milestone_id issues = issues.where(fixed_version_id: milestone_id) if milestone_id.present? + #pm相关 + # parent_id, + issues = issues.where(parent_id: parent_id) if parent_id.present? + + # pm_issue_type + issues = issues.where(pm_issue_type: pm_issue_type) if pm_issue_type.present? + # pm_project_id issues = issues.where(pm_project_id: pm_project_id) if pm_project_id.present? diff --git a/app/views/api/v1/issues/_detail.json.jbuilder b/app/views/api/v1/issues/_detail.json.jbuilder index 7c3adecc3..bec02a555 100644 --- a/app/views/api/v1/issues/_detail.json.jbuilder +++ b/app/views/api/v1/issues/_detail.json.jbuilder @@ -44,4 +44,8 @@ json.operate_journals_count issue.operate_journals.size json.attachments issue.attachments.each do |attachment| json.partial! "api/v1/attachments/simple_detail", locals: {attachment: attachment} end -json.pull_fixed issue.pull_attached_issues.where(fixed: true).present? \ No newline at end of file +json.pull_fixed issue.pull_attached_issues.where(fixed: true).present? +json.parent_id issue.parent_id +json.pm_issue_type issue.pm_issue_type +json.pm_sprint_id issue.pm_sprint_id +json.pm_project_id issue.pm_project_id diff --git a/app/views/api/v1/issues/index.json.jbuilder b/app/views/api/v1/issues/index.json.jbuilder index cde117fdc..8fd915553 100644 --- a/app/views/api/v1/issues/index.json.jbuilder +++ b/app/views/api/v1/issues/index.json.jbuilder @@ -7,6 +7,6 @@ json.issues @issues.each do |issue| if params[:only_name].present? json.(issue, :id, :subject, :project_issues_index) else - json.partial! "simple_detail", locals: {issue: issue} + json.partial! "api/v1/issues/simple_detail", locals: {issue: issue} end end \ No newline at end of file diff --git a/app/views/api/v1/pm_issues/create.json.jbuilder b/app/views/api/v1/pm_issues/create.json.jbuilder deleted file mode 100644 index f45ef5b2f..000000000 --- a/app/views/api/v1/pm_issues/create.json.jbuilder +++ /dev/null @@ -1 +0,0 @@ -json.partial! "api/v1/issues/detail", locals: {issue: @object_result} diff --git a/config/routes/api.rb b/config/routes/api.rb index ceb2d27ce..88b75c740 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -1,5 +1,9 @@ defaults format: :json do - namespace :api do + namespace :api do + namespace :pm do + resources :issues + end + namespace :v1 do resources :users, only: [:index] do