Browse Source

merge from develop

pull/313/head
yystopf 4 years ago
parent
commit
f8b63ff02e
14 changed files with 155 additions and 5 deletions
  1. +8
    -3
      app/controllers/compare_controller.rb
  2. +10
    -1
      app/controllers/concerns/repository/languages_percentagable.rb
  3. +1
    -0
      app/controllers/pull_requests_controller.rb
  4. +1
    -1
      app/controllers/repositories_controller.rb
  5. +20
    -0
      app/controllers/reviews_controller.rb
  6. +1
    -0
      app/models/issue.rb
  7. +2
    -0
      app/models/journal.rb
  8. +27
    -0
      app/models/review.rb
  9. +40
    -0
      app/services/api/v1/projects/pull_requests/reviews/create_service.rb
  10. +14
    -0
      app/views/pull_requests/show.json.jbuilder
  11. +10
    -0
      app/views/reviews/create.json.jbuilder
  12. +1
    -0
      config/routes.rb
  13. +15
    -0
      db/migrate/20220629054645_create_reviews.rb
  14. +5
    -0
      spec/models/review_spec.rb

+ 8
- 3
app/controllers/compare_controller.rb View File

@@ -6,9 +6,14 @@ class CompareController < ApplicationController
end

def show
load_compare_params
compare
@merge_status, @merge_message = get_merge_message
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
end
@page_size = page_size <= 0 ? 1 : page_size
@page_limit = page_limit <=0 ? 15 : page_limit
@page_offset = (@page_size -1) * @page_limit


+ 10
- 1
app/controllers/concerns/repository/languages_percentagable.rb View File

@@ -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}


+ 1
- 0
app/controllers/pull_requests_controller.rb View File

@@ -181,6 +181,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


+ 1
- 1
app/controllers/repositories_controller.rb View File

@@ -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]



+ 20
- 0
app/controllers/reviews_controller.rb View File

@@ -0,0 +1,20 @@
class ReviewsController < ApplicationController
before_action :require_login
before_action :load_project
before_action :load_pull_request

def create
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
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

+ 1
- 0
app/models/issue.rb View File

@@ -69,6 +69,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"])}


+ 2
- 0
app/models/journal.rb View File

@@ -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)
#


+ 27
- 0
app/models/review.rb View File

@@ -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

+ 40
- 0
app/services/api/v1/projects/pull_requests/reviews/create_service.rb View File

@@ -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

+ 14
- 0
app/views/pull_requests/show.json.jbuilder View File

@@ -7,6 +7,20 @@ 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

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
json.extract! @pull_request, :id,:base, :head, :status,:fork_project_id, :is_original


+ 10
- 0
app/views/reviews/create.json.jbuilder View File

@@ -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)

+ 1
- 0
config/routes.rb View File

@@ -556,6 +556,7 @@ Rails.application.routes.draw do
post :refuse_merge
get :files
get :commits
resources :reviews, only: [:create]
end
collection do
post :check_can_merge


+ 15
- 0
db/migrate/20220629054645_create_reviews.rb View File

@@ -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

+ 5
- 0
spec/models/review_spec.rb View File

@@ -0,0 +1,5 @@
require 'rails_helper'

RSpec.describe Review, type: :model do
pending "add some examples to (or delete) #{__FILE__}"
end

Loading…
Cancel
Save