diff --git a/app/models/issue_tag.rb b/app/models/issue_tag.rb index e39e72df4..7b61f4016 100644 --- a/app/models/issue_tag.rb +++ b/app/models/issue_tag.rb @@ -2,6 +2,6 @@ class IssueTag < ApplicationRecord has_many :issue_tags_relates, dependent: :destroy has_many :issues, through: :issue_tags_relates - belongs_to :project, optional: true + belongs_to :project, optional: true, counter_cache: true end diff --git a/app/models/project.rb b/app/models/project.rb index 89a5e80e2..0ac53b962 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -120,4 +120,16 @@ class Project < ApplicationRecord is_public? || User.current.admin? || member?(User.current) end + def version_releases_size(current_user_id, type) + if current_user_id == self.user_id && type.to_s == "all" + self.repository.version_releases_count + else + self.repository.version_releases.releases_size + end + end + + def contributor_users + self.pull_requests.select(:user_id).pluck(:user_id).uniq.size + end + end diff --git a/app/models/version.rb b/app/models/version.rb index 8e762af24..18996d6c7 100644 --- a/app/models/version.rb +++ b/app/models/version.rb @@ -1,5 +1,5 @@ class Version < ApplicationRecord - belongs_to :project + belongs_to :project, counter_cache: true has_many :issues, class_name: "Issue", foreign_key: "fixed_version_id" belongs_to :user, optional: true diff --git a/app/models/version_release.rb b/app/models/version_release.rb index 01db9eda6..aa01a163d 100644 --- a/app/models/version_release.rb +++ b/app/models/version_release.rb @@ -1,6 +1,7 @@ class VersionRelease < ApplicationRecord - belongs_to :repository + belongs_to :repository, counter_cache: true belongs_to :user has_many :project_trends, as: :trend, dependent: :destroy + scope :releases_size, ->{where(draft: false, prerelease: false)} # has_many :attachments, as: :container, dependent: :destroy end diff --git a/app/views/repositories/show.json.jbuilder b/app/views/repositories/show.json.jbuilder index 052eff566..5b449fd18 100644 --- a/app/views/repositories/show.json.jbuilder +++ b/app/views/repositories/show.json.jbuilder @@ -7,6 +7,11 @@ json.project_identifier @project.identifier json.praises_count @project.praises_count.to_i json.forked_count @project.forked_count.to_i json.watchers_count @project.watchers_count.to_i +json.versions_count @project.versions_count #里程碑数量 +json.version_releases_count @project.releases_size(current_user.try(:id), "all") +json.version_releasesed_count @project.releases_size(current_user.try(:id), "released") #已发行的版本 +json.contributor_users_count @project.contributor_users +json.issue_tags_count @project.issue_tags_count json.branches_count @branches_count json.commits_count @commits_count json.permission render_edit_project_permission(current_user, @project) if current_user diff --git a/db/migrate/20200513080857_add_some_counts_to_project.rb b/db/migrate/20200513080857_add_some_counts_to_project.rb new file mode 100644 index 000000000..e30dd085c --- /dev/null +++ b/db/migrate/20200513080857_add_some_counts_to_project.rb @@ -0,0 +1,20 @@ +class AddSomeCountsToProject < ActiveRecord::Migration[5.2] + def change + add_column :projects, :versions_count, :integer, default: 0 #里程碑 + add_column :repositories, :version_releases_count, :integer, default: 0 #版本发布d + add_column :projects, :issue_tags_count, :integer, default: 0 #标签的数量 + + Project.includes(:versions, :issue_tags, repository: :version_releases).find_each do |p| + puts "###____change_p.id____######{p.id}" + r = p&.repository + Project.reset_counters p.id, :versions + Project.reset_counters p.id, :issue_tags + + if r.present? + puts "###____change_p.id____######{r.id}" + Repository.reset_counters r.id, :version_releases + end + + end + end +end