From 76cc185a1d0f3f974151fa870778a9d6010e510e Mon Sep 17 00:00:00 2001 From: yystopf Date: Wed, 29 Jun 2022 17:16:29 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E6=96=B0=E5=A2=9E:=20=E5=90=88=E5=B9=B6?= =?UTF-8?q?=E8=AF=B7=E6=B1=82=E5=AE=A1=E6=A0=B8model?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/reviews_controller.rb | 19 +++++++++ app/models/issue.rb | 1 + app/models/journal.rb | 2 + app/models/review.rb | 27 +++++++++++++ .../pull_requests/reviews/create_service.rb | 40 +++++++++++++++++++ app/views/reviews/create.json.jbuilder | 10 +++++ config/routes.rb | 1 + db/migrate/20220629054645_create_reviews.rb | 15 +++++++ spec/models/review_spec.rb | 5 +++ 9 files changed, 120 insertions(+) create mode 100644 app/controllers/reviews_controller.rb create mode 100644 app/models/review.rb create mode 100644 app/services/api/v1/projects/pull_requests/reviews/create_service.rb create mode 100644 app/views/reviews/create.json.jbuilder create mode 100644 db/migrate/20220629054645_create_reviews.rb create mode 100644 spec/models/review_spec.rb diff --git a/app/controllers/reviews_controller.rb b/app/controllers/reviews_controller.rb new file mode 100644 index 000000000..175660605 --- /dev/null +++ b/app/controllers/reviews_controller.rb @@ -0,0 +1,19 @@ +class ReviewsController < ApplicationController + before_action :require_login + before_action :load_project + before_action :load_pull_request + + def create + @journal, @review = Api::V1::Projects::PullRequests::Reviews::CreateService.call(@project, @pull_request, review_params, current_user) + end + + private + def review_params + params.require(:review).permit(:content, :commit_id, :status) + end + + def load_pull_request + @pull_request = @project.pull_requests.where(gitea_number: params[:id]).where.not(id: params[:id]).take || PullRequest.find_by_id(params[:id]) + end + +end \ No newline at end of file diff --git a/app/models/issue.rb b/app/models/issue.rb index 2a3b95958..fa8c43ea9 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -68,6 +68,7 @@ class Issue < ApplicationRecord has_many :issue_tags, through: :issue_tags_relates has_many :issue_times, dependent: :destroy has_many :issue_depends, dependent: :destroy + has_many :reviews, dependent: :destroy scope :issue_includes, ->{includes(:user)} scope :issue_many_includes, ->{includes(journals: :user)} scope :issue_issue, ->{where(issue_classify: [nil,"issue"])} diff --git a/app/models/journal.rb b/app/models/journal.rb index 5bf05b0d2..297c7a148 100644 --- a/app/models/journal.rb +++ b/app/models/journal.rb @@ -12,11 +12,13 @@ # parent_id :integer # comments_count :integer default("0") # reply_id :integer +# review_id :integer # # Indexes # # index_journals_on_created_on (created_on) # index_journals_on_journalized_id (journalized_id) +# index_journals_on_review_id (review_id) # index_journals_on_user_id (user_id) # journals_journalized_id (journalized_id,journalized_type) # diff --git a/app/models/review.rb b/app/models/review.rb new file mode 100644 index 000000000..f2d3e678d --- /dev/null +++ b/app/models/review.rb @@ -0,0 +1,27 @@ +# == Schema Information +# +# Table name: reviews +# +# id :integer not null, primary key +# issue_id :integer +# reviewer_id :integer +# content :text(65535) +# commit_id :string(255) +# status :integer default("0") +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# index_reviews_on_issue_id (issue_id) +# index_reviews_on_reviewer_id (reviewer_id) +# + +class Review < ApplicationRecord + + belongs_to :issue + belongs_to :reviewer, class_name: 'User', foreign_key: :reviewer_id + has_one :journal, dependent: :destroy + + enum status: {common: 0, approved: 1, rejected: 2} +end diff --git a/app/services/api/v1/projects/pull_requests/reviews/create_service.rb b/app/services/api/v1/projects/pull_requests/reviews/create_service.rb new file mode 100644 index 000000000..c003256dc --- /dev/null +++ b/app/services/api/v1/projects/pull_requests/reviews/create_service.rb @@ -0,0 +1,40 @@ +class Api::V1::Projects::PullRequests::Reviews::CreateService < ApplicationService + include ActiveModel::Model + + attr_reader :project, :pull_request, :issue, :status, :commit_id, :content, :current_user + attr_accessor :review, :journal + + validates :status, inclusion: { in: %w(common approved rejected), message: '请输入正确的Type'} + + def initialize(project, pull_request, params, current_user) + @project = project + @pull_request = pull_request + @issue = pull_request&.issue + @status = params[:status] + @commit_id = params[:commit_id] + @content = params[:content] + @current_user = current_user + end + + def call + raise Error, errors.full_messages.join(", ") unless valid? + ActiveRecord::Base.transaction do + create_review + create_journal + end + + return @journal, @review + rescue + raise Error, '服务器错误,请联系系统管理员!' + end + + private + def create_review + @review = issue.reviews.create!(status: status, content: content, commit_id: commit_id, reviewer_id: @current_user.id) + end + + def create_journal + @journal = issue.journals.create!(notes: content, user_id: @current_user.id, review_id: @review.id) + end + +end \ No newline at end of file diff --git a/app/views/reviews/create.json.jbuilder b/app/views/reviews/create.json.jbuilder new file mode 100644 index 000000000..57e6933e5 --- /dev/null +++ b/app/views/reviews/create.json.jbuilder @@ -0,0 +1,10 @@ +json.issue do + json.partial! 'pull_requests/detail', issue: @pull_request.issue +end +json.journal_id @journal.id +json.journal_notes @journal.notes +json.review_id @review.id +json.commit_id @review.commit_id +json.content @review.content +json.status @review.status +json.created_at format_time(@review.created_at) \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index c0e845a85..79b937b00 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -528,6 +528,7 @@ Rails.application.routes.draw do post :refuse_merge get :files get :commits + resources :reviews, only: [:create] end collection do post :check_can_merge diff --git a/db/migrate/20220629054645_create_reviews.rb b/db/migrate/20220629054645_create_reviews.rb new file mode 100644 index 000000000..5027b074d --- /dev/null +++ b/db/migrate/20220629054645_create_reviews.rb @@ -0,0 +1,15 @@ +class CreateReviews < ActiveRecord::Migration[5.2] + def change + create_table :reviews do |t| + t.references :issue + t.references :reviewer + t.text :content + t.string :commit_id + t.integer :status, default: 0 + + t.timestamps + end + + add_reference :journals, :review + end +end diff --git a/spec/models/review_spec.rb b/spec/models/review_spec.rb new file mode 100644 index 000000000..8fc758155 --- /dev/null +++ b/spec/models/review_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe Review, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end From a608803aa887ea810a411e2c11b56189b7f3a837 Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 30 Jun 2022 11:00:18 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E6=96=B0=E5=A2=9E:=20=E5=90=88=E5=B9=B6?= =?UTF-8?q?=E8=AF=B7=E6=B1=82=E5=AE=A1=E6=9F=A5=E9=9C=80=E5=AE=A1=E6=9F=A5?= =?UTF-8?q?=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/pull_requests_controller.rb | 1 + app/controllers/reviews_controller.rb | 3 ++- app/views/pull_requests/show.json.jbuilder | 12 ++++++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/app/controllers/pull_requests_controller.rb b/app/controllers/pull_requests_controller.rb index f45d1f359..52da4ac48 100644 --- a/app/controllers/pull_requests_controller.rb +++ b/app/controllers/pull_requests_controller.rb @@ -176,6 +176,7 @@ class PullRequestsController < ApplicationController @issue_assign_to = @issue.get_assign_user @gitea_pull = Gitea::PullRequest::GetService.call(@owner.login, @repository.identifier, @pull_request.gitea_number, current_user&.gitea_token) + @last_review = @pull_request.issue.reviews.take end def pr_merge diff --git a/app/controllers/reviews_controller.rb b/app/controllers/reviews_controller.rb index 175660605..eec57113d 100644 --- a/app/controllers/reviews_controller.rb +++ b/app/controllers/reviews_controller.rb @@ -4,7 +4,8 @@ class ReviewsController < ApplicationController before_action :load_pull_request def create - @journal, @review = Api::V1::Projects::PullRequests::Reviews::CreateService.call(@project, @pull_request, review_params, current_user) + return render_forbidden('您不是审查人员,无法进行审查!') if current_user&.id != @pull_request.issue.assigned_to_id + @journal, @review = Api::V1::Projects::PullRequests::Reviews::CreateService.call(@project, @pull_request, review_params, current_user) end private diff --git a/app/views/pull_requests/show.json.jbuilder b/app/views/pull_requests/show.json.jbuilder index 739bfd74e..4d5e7aef2 100644 --- a/app/views/pull_requests/show.json.jbuilder +++ b/app/views/pull_requests/show.json.jbuilder @@ -7,6 +7,18 @@ json.commits_count @gitea_pull["commit_num"] json.files_count @gitea_pull["changed_files"] json.comments_count @issue.journals.parent_journals.size json.comments_total_count @issue.get_journals_size +json.assign_user do + json.partial! 'users/user_simple', user: @issue_assign_to +end + +json.author do + json.partial! 'users/user_simple', user: @issue_user +end + +json.last_review do + json.(@last_review, :id, :commit_id, :content, :status) + json.created_at format_time(@last_review.created_at) +end json.pull_request do json.extract! @pull_request, :id,:base, :head, :status,:fork_project_id, :is_original From 9dbb9a42d67ab8de9056ed1a036db9a53d8d28a5 Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 30 Jun 2022 16:33:09 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=E6=96=B0=E5=A2=9E:=20compare=20=E6=94=AF?= =?UTF-8?q?=E6=8C=81sha=E5=AF=B9=E6=AF=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/compare_controller.rb | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/app/controllers/compare_controller.rb b/app/controllers/compare_controller.rb index 1aab7adbe..be7afaa1d 100644 --- a/app/controllers/compare_controller.rb +++ b/app/controllers/compare_controller.rb @@ -6,13 +6,18 @@ class CompareController < ApplicationController end def show - load_compare_params - compare - @merge_status, @merge_message = get_merge_message - @page_size = page_size <= 0 ? 1 : page_size - @page_limit = page_limit <=0 ? 15 : page_limit - @page_offset = (@page_size -1) * @page_limit - Rails.logger.info("+========#{@page_size}-#{@page_limit}-#{@page_offset}") + if params[:type] == "sha" + load_compare_params + @compare_result ||= gitea_compare(@base, @head) + else + load_compare_params + compare + @merge_status, @merge_message = get_merge_message + @page_size = page_size <= 0 ? 1 : page_size + @page_limit = page_limit <=0 ? 15 : page_limit + @page_offset = (@page_size -1) * @page_limit + Rails.logger.info("+========#{@page_size}-#{@page_limit}-#{@page_offset}") + end end private From 7b91ad37e5c14267aa2605ce064f56ed739fdfd4 Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 30 Jun 2022 16:38:46 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/compare_controller.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/controllers/compare_controller.rb b/app/controllers/compare_controller.rb index be7afaa1d..afdceac9d 100644 --- a/app/controllers/compare_controller.rb +++ b/app/controllers/compare_controller.rb @@ -13,11 +13,11 @@ class CompareController < ApplicationController load_compare_params compare @merge_status, @merge_message = get_merge_message - @page_size = page_size <= 0 ? 1 : page_size - @page_limit = page_limit <=0 ? 15 : page_limit - @page_offset = (@page_size -1) * @page_limit - Rails.logger.info("+========#{@page_size}-#{@page_limit}-#{@page_offset}") end + @page_size = page_size <= 0 ? 1 : page_size + @page_limit = page_limit <=0 ? 15 : page_limit + @page_offset = (@page_size -1) * @page_limit + Rails.logger.info("+========#{@page_size}-#{@page_limit}-#{@page_offset}") end private From 484c91a58108ae59f33deb872e99f8eb634083bc Mon Sep 17 00:00:00 2001 From: xiaoxiaoqiong Date: Wed, 6 Jul 2022 15:26:49 +0800 Subject: [PATCH 5/7] =?UTF-8?q?fixed=20=E5=90=8C=E6=AD=A5gitea=E5=AF=86?= =?UTF-8?q?=E7=A0=81=E7=8A=B6=E6=80=81is=5Fsync=5Fpwd=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/concerns/login_helper.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/controllers/concerns/login_helper.rb b/app/controllers/concerns/login_helper.rb index e608b7833..86ab175ef 100644 --- a/app/controllers/concerns/login_helper.rb +++ b/app/controllers/concerns/login_helper.rb @@ -116,6 +116,7 @@ module LoginHelper interactor = Gitea::User::UpdateInteractor.call(user.login, sync_params.merge(hash)) if interactor.success? Rails.logger.info "########_ login is #{user.login} sync_pwd_to_gitea success _########" + user.update_column(:is_sync_pwd, true) true else Rails.logger.info "########_ login is #{user.login} sync_pwd_to_gitea fail!: #{interactor.error}" From 1d6d48fc9492c6bc0e6deab9fe94e4574d063472 Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 7 Jul 2022 09:24:11 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E6=96=B0=E5=A2=9E:=20pr=20=E6=9C=80?= =?UTF-8?q?=E5=90=8E=E4=B8=80=E6=AC=A1=E5=AE=A1=E6=A0=B8=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/repositories_controller.rb | 2 +- app/views/pull_requests/show.json.jbuilder | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 34ac97632..51fa37aca 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -9,7 +9,7 @@ class RepositoriesController < ApplicationController before_action :load_repository before_action :authorizate!, except: [:sync_mirror, :tags, :commit, :archive] before_action :authorizate_user_can_edit_repo!, only: %i[sync_mirror] - before_action :get_ref, only: %i[entries sub_entries top_counts file archive] + before_action :get_ref, only: %i[entries sub_entries top_counts files archive] before_action :get_latest_commit, only: %i[entries sub_entries top_counts] before_action :get_statistics, only: %i[top_counts] diff --git a/app/views/pull_requests/show.json.jbuilder b/app/views/pull_requests/show.json.jbuilder index 4d5e7aef2..684a60e9c 100644 --- a/app/views/pull_requests/show.json.jbuilder +++ b/app/views/pull_requests/show.json.jbuilder @@ -15,9 +15,11 @@ json.author do json.partial! 'users/user_simple', user: @issue_user end -json.last_review do - json.(@last_review, :id, :commit_id, :content, :status) - json.created_at format_time(@last_review.created_at) +if @last_review.present? + json.last_review do + json.(@last_review, :id, :commit_id, :content, :status) + json.created_at format_time(@last_review.created_at) + end end json.pull_request do From 3b62f096698d2ba99f5281b66e2c010768f70676 Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 7 Jul 2022 10:05:12 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E6=96=B0=E5=A2=9E:=20=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E8=AF=AD=E8=A8=80=E5=8C=B9=E9=85=8D=E5=B9=B6=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../concerns/repository/languages_percentagable.rb | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/app/controllers/concerns/repository/languages_percentagable.rb b/app/controllers/concerns/repository/languages_percentagable.rb index dc6abcb9c..53876327a 100644 --- a/app/controllers/concerns/repository/languages_percentagable.rb +++ b/app/controllers/concerns/repository/languages_percentagable.rb @@ -5,7 +5,16 @@ module Repository::LanguagesPercentagable result = Gitea::Repository::Languages::ListService.call(@owner.login, @repository.identifier, current_user&.gitea_token) - result[:status] === :success ? hash_transform_precentagable(result[:body]) : nil + @transform_language = result[:status] === :success ? hash_transform_precentagable(result[:body]) : nil + update_project_language(@transform_language) unless @transform_language.nil? + @transform_language + end + + def update_project_language(language) + db_language = ProjectLanguage.find_or_create_by!(name: language.keys.first.downcase.upcase_first) + @project.update_column(:project_language_id, db_language.id) + rescue + return end # hash eq:{"JavaScript": 301681522,"Ruby": 1444004,"Roff": 578781}