diff --git a/app/assets/javascripts/pm/issues.js b/app/assets/javascripts/pm/issues.js new file mode 100644 index 000000000..dee720fac --- /dev/null +++ b/app/assets/javascripts/pm/issues.js @@ -0,0 +1,2 @@ +// Place all the behaviors and hooks related to the matching controller here. +// All this logic will automatically be available in application.js. diff --git a/app/assets/javascripts/pm/journals.js b/app/assets/javascripts/pm/journals.js new file mode 100644 index 000000000..dee720fac --- /dev/null +++ b/app/assets/javascripts/pm/journals.js @@ -0,0 +1,2 @@ +// Place all the behaviors and hooks related to the matching controller here. +// All this logic will automatically be available in application.js. diff --git a/app/assets/stylesheets/pm/issues.scss b/app/assets/stylesheets/pm/issues.scss new file mode 100644 index 000000000..cdf9fbc43 --- /dev/null +++ b/app/assets/stylesheets/pm/issues.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the pm/issues controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/pm/journals.scss b/app/assets/stylesheets/pm/journals.scss new file mode 100644 index 000000000..45dbf18b4 --- /dev/null +++ b/app/assets/stylesheets/pm/journals.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the pm/journals controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/controllers/pm/issues_controller.rb b/app/controllers/pm/issues_controller.rb new file mode 100644 index 000000000..ec2370cdf --- /dev/null +++ b/app/controllers/pm/issues_controller.rb @@ -0,0 +1,37 @@ +class Pm::IssuesController < ApplicationController + before_action :require_login, except: [:index] + + 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 + 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) + end + + private + + 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, + issue_tag_ids: [], + assigner_ids: [], + attachment_ids: [], + receivers_login: [] + ) + end +end diff --git a/app/helpers/pm/issues_helper.rb b/app/helpers/pm/issues_helper.rb new file mode 100644 index 000000000..79cd6dd3e --- /dev/null +++ b/app/helpers/pm/issues_helper.rb @@ -0,0 +1,2 @@ +module Pm::IssuesHelper +end diff --git a/app/helpers/pm/journals_helper.rb b/app/helpers/pm/journals_helper.rb new file mode 100644 index 000000000..e1a99e5ee --- /dev/null +++ b/app/helpers/pm/journals_helper.rb @@ -0,0 +1,2 @@ +module Pm::JournalsHelper +end diff --git a/app/models/issue.rb b/app/models/issue.rb index a5fee95fb..6325a327f 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -36,6 +36,7 @@ # blockchain_token_num :integer # pm_project_id :integer # pm_sprint_id :integer +# pm_issue_type :integer # # Indexes # diff --git a/app/services/api/v1/issues/create_service.rb b/app/services/api/v1/issues/create_service.rb index fc81f4dde..a5dc3d88e 100644 --- a/app/services/api/v1/issues/create_service.rb +++ b/app/services/api/v1/issues/create_service.rb @@ -31,9 +31,10 @@ class Api::V1::Issues::CreateService < ApplicationService @receivers_login = params[:receivers_login] @pm_project_id = params[:pm_project_id] @pm_sprint_id = params[:pm_sprint_id] + @pm_issue_type = params[:pm_issue_type] end - def call + def call raise Error, errors.full_messages.join(", ") unless valid? ActiveRecord::Base.transaction do check_issue_status(status_id) @@ -48,7 +49,6 @@ class Api::V1::Issues::CreateService < ApplicationService load_attachments(attachment_ids) unless attachment_ids.blank? load_issue_tags(issue_tag_ids) unless issue_tag_ids.blank? load_atme_receivers(receivers_login) unless receivers_login.blank? - try_lock("Api::V1::Issues::CreateService:#{project.id}") # 开始写数据,加锁 @created_issue = Issue.new(issue_attributes) build_author_participants @@ -61,6 +61,7 @@ class Api::V1::Issues::CreateService < ApplicationService @created_issue.issue_tags = @issue_tags unless issue_tag_ids.blank? @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.issue_tags_value = @issue_tags.order("id asc").pluck(:id).join(",") unless issue_tag_ids.blank? @created_issue.save! diff --git a/config/routes.rb b/config/routes.rb index 7694a77c0..647405bdb 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -792,6 +792,11 @@ Rails.application.routes.draw do end end + namespace :pm do + resource :issues + resource :journals + end + namespace :admins do mount Sidekiq::Web => '/sidekiq' get '/', to: 'dashboards#index' diff --git a/config/routes/api.rb b/config/routes/api.rb index 5b1f37d8d..ceb2d27ce 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -56,8 +56,7 @@ defaults format: :json do end end - resources :pm_issues - + scope module: :issues do resources :issue_tags, except: [:new, :edit] do collection do diff --git a/db/migrate/20231031070603_add_pm_issue_type_to_issues.rb b/db/migrate/20231031070603_add_pm_issue_type_to_issues.rb new file mode 100644 index 000000000..846a760f1 --- /dev/null +++ b/db/migrate/20231031070603_add_pm_issue_type_to_issues.rb @@ -0,0 +1,5 @@ +class AddPmIssueTypeToIssues < ActiveRecord::Migration[5.2] + def change + add_column :issues, :pm_issue_type, :integer + end +end diff --git a/spec/controllers/pm/issues_controller_spec.rb b/spec/controllers/pm/issues_controller_spec.rb new file mode 100644 index 000000000..cb80ebb71 --- /dev/null +++ b/spec/controllers/pm/issues_controller_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe Pm::IssuesController, type: :controller do + +end diff --git a/spec/controllers/pm/journals_controller_spec.rb b/spec/controllers/pm/journals_controller_spec.rb new file mode 100644 index 000000000..0a0ced0ba --- /dev/null +++ b/spec/controllers/pm/journals_controller_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe Pm::JournalsController, type: :controller do + +end diff --git a/spec/helpers/pm/issues_helper_spec.rb b/spec/helpers/pm/issues_helper_spec.rb new file mode 100644 index 000000000..43b9ba751 --- /dev/null +++ b/spec/helpers/pm/issues_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the Pm::IssuesHelper. For example: +# +# describe Pm::IssuesHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe Pm::IssuesHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/helpers/pm/journals_helper_spec.rb b/spec/helpers/pm/journals_helper_spec.rb new file mode 100644 index 000000000..8dd212826 --- /dev/null +++ b/spec/helpers/pm/journals_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the Pm::JournalsHelper. For example: +# +# describe Pm::JournalsHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe Pm::JournalsHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end