From 4f0b3ef710f79e0abb918de996733574205ecee2 Mon Sep 17 00:00:00 2001 From: Tim Wright Date: Fri, 21 Feb 2020 15:11:49 +1300 Subject: [PATCH 1/3] added related project code --- app/models/project.rb | 2 ++ app/services/slack/action/add_code_review.rb | 17 ++++++++++++++++- ...1020120_add_related_project_id_to_project.rb | 5 +++++ db/schema.rb | 3 ++- 4 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 db/migrate/20200221020120_add_related_project_id_to_project.rb diff --git a/app/models/project.rb b/app/models/project.rb index 5747eba..5d34abe 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -7,4 +7,6 @@ class Project < ApplicationRecord belongs_to :slack_workspace has_many :developers + + has_many :related_projects, class_name: 'Project', foreign_key: 'related_project_id' end diff --git a/app/services/slack/action/add_code_review.rb b/app/services/slack/action/add_code_review.rb index 221f94d..3c96ae5 100644 --- a/app/services/slack/action/add_code_review.rb +++ b/app/services/slack/action/add_code_review.rb @@ -19,7 +19,11 @@ def initialize(slack_workspace, url, requester, given_reviewers_tags) reviewers = given_reviewers reviewers += pick_reviewers_in_project(reviewers, requester) - reviewers += pick_external_reviewers(reviewers, requester) + + related_project = Project.find(project.related_project_id) + + reviewers += pick_external_reviewers_by_project(reviewers, requester, related_project) if related_project.present? + reviewers += pick_external_reviewers(reviewers, requester) if related_project.blank? create_code_review(url, reviewers, given_reviewers, requester) rescue ActiveRecord::RecordNotFound => e @@ -66,6 +70,17 @@ def pick_external_reviewers(reviewers, requester) .limit(to_take) end + def pick_external_reviewers_by_project(reviewers, requester, project) + to_take = REQUIRED_NUMBER_OF_REVIEWERS - reviewers.length + + Developer + .queue + .where.not(id: reviewers + [requester]) + .where(slack_workspace: @slack_workspace) + .where(project: project) + .limit(to_take) + end + def pick_reviewers_by_tags(tags) return [] if tags.empty? diff --git a/db/migrate/20200221020120_add_related_project_id_to_project.rb b/db/migrate/20200221020120_add_related_project_id_to_project.rb new file mode 100644 index 0000000..e8a590b --- /dev/null +++ b/db/migrate/20200221020120_add_related_project_id_to_project.rb @@ -0,0 +1,5 @@ +class AddRelatedProjectIdToProject < ActiveRecord::Migration[6.0] + def change + add_column :projects, :related_project_id, :integer + end +end diff --git a/db/schema.rb b/db/schema.rb index 8938be1..be5f384 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2020_01_24_013912) do +ActiveRecord::Schema.define(version: 2020_02_21_020120) do create_table "code_reviews", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci", force: :cascade do |t| t.string "url" @@ -47,6 +47,7 @@ t.bigint "slack_workspace_id" t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false + t.integer "related_project_id" t.index ["slack_workspace_id"], name: "index_projects_on_slack_workspace_id" end From d82989bde4e3317e3255116a04296dfd3aad9d74 Mon Sep 17 00:00:00 2001 From: Tim Wright Date: Fri, 21 Feb 2020 15:17:52 +1300 Subject: [PATCH 2/3] add action for related projects --- .../slack/action/add_related_project.rb | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 app/services/slack/action/add_related_project.rb diff --git a/app/services/slack/action/add_related_project.rb b/app/services/slack/action/add_related_project.rb new file mode 100644 index 0000000..c93cb9d --- /dev/null +++ b/app/services/slack/action/add_related_project.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +module Slack + module Action + # Adds a project to another project so that they are related for code reviews + class AddRelatedProject < Slack::AbstractAction + def initialize(slack_workspace, project_name, related_project_name) + super(slack_workspace) + project = @slack_workspace.projects.find_by(name: project_name) + related_project = @slack_workspace.projects.find_by(name: related_project_name) + + project.related_project_id = related_project.id + project.save! + + @text = 'Projects are now related.' + end + end + end +end From d3821b14cad31234ed2740171a54bdaa824572e5 Mon Sep 17 00:00:00 2001 From: Tim Wright Date: Fri, 21 Feb 2020 15:19:48 +1300 Subject: [PATCH 3/3] tidy --- app/models/project.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/project.rb b/app/models/project.rb index 5d34abe..c326cf7 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -8,5 +8,5 @@ class Project < ApplicationRecord has_many :developers - has_many :related_projects, class_name: 'Project', foreign_key: 'related_project_id' + has :related_project, class_name: 'Project', foreign_key: 'related_project_id' end