diff --git a/app/controllers/api/v1/issues_controller.rb b/app/controllers/api/v1/issues_controller.rb index 35634a1a..782c8781 100644 --- a/app/controllers/api/v1/issues_controller.rb +++ b/app/controllers/api/v1/issues_controller.rb @@ -6,11 +6,11 @@ class Api::V1::IssuesController < Api::V1::BaseController def index IssueTag.init_data(@project.id) if @project.issue_tags.size < 10 - @object_results = Api::V1::Issues::ListService.call(@project, query_params, current_user) - @opened_issues_count = @object_results.opened.size - @closed_issues_count = @object_results.closed.size + @object_result = Api::V1::Issues::ListService.call(@project, query_params, current_user) + @opened_issues_count = @object_result[:opened_issues_count] + @closed_issues_count = @object_result[:closed_issues_count] - @issues = kaminari_paginate(@object_results) + @issues = kaminari_paginate(@object_result[:data]) end def create diff --git a/app/models/issue_priority.rb b/app/models/issue_priority.rb index 27865a70..c8ef7329 100644 --- a/app/models/issue_priority.rb +++ b/app/models/issue_priority.rb @@ -15,4 +15,21 @@ class IssuePriority < ApplicationRecord has_many :issues + + def self.init_data + map = { + "1" => "低", + "2" => "正常", + "3" => "高", + "4" => "紧急" + } + IssuePriority.order(id: :asc).each do |prty| + if map["#{prty.id}"] == prty.name + IssuePriority.find_or_create_by(id: prty.id, name: prty.name) + else + Issue.where(priority_id: prty.id).each{|i| i.update_column(:priority_id, 2)} + prty.destroy! + end + end + end end diff --git a/app/models/issue_status.rb b/app/models/issue_status.rb index eb4db1dc..fcce29c3 100644 --- a/app/models/issue_status.rb +++ b/app/models/issue_status.rb @@ -36,7 +36,7 @@ class IssueStatus < ApplicationRecord "6" => "拒绝" } IssueStatus.order(id: :asc).each do |stat| - if map[stat.id] == stat.name + if map["#{stat.id}"] == stat.name IssueStatus.find_or_create_by(id: stat.id, name: stat.name) else Issue.where(status_id: stat.id).each{|i| i.update_column(:status_id, 1)} diff --git a/app/services/api/v1/issues/list_service.rb b/app/services/api/v1/issues/list_service.rb index 6383a6e1..8acf2013 100644 --- a/app/services/api/v1/issues/list_service.rb +++ b/app/services/api/v1/issues/list_service.rb @@ -3,11 +3,11 @@ class Api::V1::Issues::ListService < ApplicationService attr_reader :project, :category, :participant_category, :keyword, :author_id, :issue_tag_ids attr_reader :milestone_id, :assigner_id, :status_id, :sort_by, :sort_direction, :current_user - attr_accessor :queried_issues + attr_accessor :queried_issues, :closed_issues_count, :opened_issues_count validates :category, inclusion: {in: %w(all opened closed), message: "请输入正确的Category"} validates :participant_category, inclusion: {in: %w(all aboutme authoredme assignedme atme), message: "请输入正确的ParticipantCategory"} - validates :sort_by, inclusion: {in: Issue.column_names, message: '请输入正确的SortBy'}, allow_blank: true + validates :sort_by, inclusion: {in: ['issues.created_on', 'issues.updated_on', 'issue_priorities.position'], message: '请输入正确的SortBy'}, allow_blank: true validates :sort_direction, inclusion: {in: %w(asc desc), message: '请输入正确的SortDirection'}, allow_blank: true validates :current_user, presence: true @@ -21,7 +21,7 @@ class Api::V1::Issues::ListService < ApplicationService @milestone_id = params[:milestone_id] @assigner_id = params[:assigner_id] @status_id = params[:status_id] - @sort_by = params[:sort_by].present? ? params[:sort_by] : 'updated_on' + @sort_by = params[:sort_by].present? ? params[:sort_by] : 'issues.updated_on' @sort_direction = (params[:sort_direction].present? ? params[:sort_direction] : 'desc').downcase @current_user = current_user end @@ -31,7 +31,7 @@ class Api::V1::Issues::ListService < ApplicationService begin issue_query_data - queried_issues + return {data: queried_issues, closed_issues_count: @closed_issues_count, opened_issues_count: @opened_issues_count} rescue raise Error, "服务器错误,请联系系统管理员!" end @@ -40,6 +40,8 @@ class Api::V1::Issues::ListService < ApplicationService private def issue_query_data issues = @project.issues.issue_issue + @closed_issues_count = issues.closed.size + @opened_issues_count = issues.opened.size case category when 'closed' @@ -52,11 +54,11 @@ class Api::V1::Issues::ListService < ApplicationService when 'aboutme' # 关于我的 issues = issues.joins(:participants, :issue_participants).where(issue_participants: {participant_type: %(authored assigned atme)},users: {id: current_user&.id}) when 'authoredme' # 我创建的 - issues = issues.joins(:participants, :issue_participants).where(issue_participants: {participant_type: %(authored)},users: {id: current_user&.id}) + issues = issues.joins(:participants, :issue_participants).where(issue_participants: {participant_type: 'assigned'},users: {id: current_user&.id}) when 'assignedme' # 我负责的 - issues = issues.joins(:participants, :issue_participants).where(issue_participants: {participant_type: %(assigned)},users: {id: current_user&.id}) + issues = issues.joins(:participants, :issue_participants).where(issue_participants: {participant_type: 'assigned'},users: {id: current_user&.id}) when 'atme' # @我的 - issues = issues.joins(:participants, :issue_participants).where(issue_participants: {participant_type: %(atme)},users: {id: current_user&.id}) + issues = issues.joins(:participants, :issue_participants).where(issue_participants: {participant_type: 'atme'},users: {id: current_user&.id}) end # author_id @@ -79,7 +81,7 @@ class Api::V1::Issues::ListService < ApplicationService scope = q.result.includes(:priority, :issue_status, :user, :assigners, :version, :issue_tags, :comment_journals) - scope = scope.reorder("issues.#{sort_by} #{sort_direction}").distinct + scope = scope.reorder("#{sort_by} #{sort_direction}").distinct @queried_issues = scope end diff --git a/lib/tasks/upgrade_issue_generate_data.rake b/lib/tasks/upgrade_issue_generate_data.rake index 857644ee..1fbe5df2 100644 --- a/lib/tasks/upgrade_issue_generate_data.rake +++ b/lib/tasks/upgrade_issue_generate_data.rake @@ -27,6 +27,7 @@ namespace :upgrade_issue_generate_data do task project_init_issue_tags_and_status: :environment do puts "____________fix start________________" + IssuePriority.init_data IssueStatus.init_data IssueTag.where(user_id: nil).destroy_all count = 0