forgeplus/app/models/pull_request.rb

64 lines
2.2 KiB
Ruby

# == Schema Information
#
# Table name: pull_requests
#
# id :integer not null, primary key
# pull_request_id :integer
# gpid :integer
# user_id :integer
# created_at :datetime not null
# updated_at :datetime not null
# status :integer default("0")
# project_id :integer
# title :string(255)
# milestone :integer
# body :text(65535)
# head :string(255)
# base :string(255)
# issue_id :integer
# fork_project_id :integer
# is_original :boolean default("0")
# comments_count :integer default("0")
# commits_count :integer default("0")
# files_count :integer default("0")
#
class PullRequest < ApplicationRecord
#status 0 默认未合并, 1表示合并, 2表示请求拒绝
include DunCheckAble
belongs_to :issue
belongs_to :user
belongs_to :project, :counter_cache => true
# belongs_to :fork_project, foreign_key: :fork_project_id
has_many :pull_request_assigns, foreign_key: :pull_request_id
has_many :pull_request_tags, foreign_key: :pull_request_id
has_many :project_trends, as: :trend, dependent: :destroy
has_many :attachments, as: :container, dependent: :destroy
def fork_project
Project.find_by(id: self.fork_project_id)
end
def bind_gitea_pull_request!(gitea_pull_number)
update_column(:gpid, gitea_pull_number)
end
# TODO: sync educoder platform repo's for update some statistics count
def self.update_some_count
PullRequest.includes(:user, :project).select(:id, :user_id, :gpid, :project_id, :fork_project_id).each do |pr|
puts pr.id
next if pr.gpid.blank?
project = pr.project
next if project.blank?
user = project.owner
next if pr.gpid === 6 || pr.gpid === 7
files_result = Gitea::PullRequest::FilesService.call(user.login, project.identifier, pr.gpid)
pr.update_column(:files_count, files_result['NumFiles']) unless files_result.blank?
commits_result = Gitea::PullRequest::CommitsService.call(user.login, project.identifier, pr.gpid)
pr.update_column(:commits_count, commits_result.size) unless commits_result.blank?
end
end
end