diff --git a/app/models/organization.rb b/app/models/organization.rb index 8bda95aff..06338bfd5 100644 --- a/app/models/organization.rb +++ b/app/models/organization.rb @@ -70,7 +70,7 @@ class Organization < Owner validates_uniqueness_of :login, :if => Proc.new { |user| user.login_changed? && user.login.present? }, case_sensitive: false delegate :description, :website, :location, :repo_admin_change_team_access, - :visibility, :max_repo_creation, :num_projects, :num_users, to: :organization_extension, allow_nil: true + :visibility, :max_repo_creation, :num_projects, :num_users, :num_teams, to: :organization_extension, allow_nil: true scope :with_visibility, ->(visibility) { joins(:organization_extension).where(organization_extensions: {visibility: visibility}) if visibility.present? } diff --git a/app/models/organization_extension.rb b/app/models/organization_extension.rb index 16797f716..8b9946cd7 100644 --- a/app/models/organization_extension.rb +++ b/app/models/organization_extension.rb @@ -14,6 +14,7 @@ # updated_at :datetime not null # num_projects :integer default("0") # num_users :integer default("0") +# num_teams :integer default("0") # # Indexes # @@ -25,6 +26,7 @@ class OrganizationExtension < ApplicationRecord belongs_to :organization has_many :organization_users, foreign_key: :organization_id, primary_key: :organization_id has_many :projects, foreign_key: :user_id, primary_key: :organization_id + has_many :teams, foreign_key: :organization_id, primary_key: :organization_id enum visibility: {common: 0, limited: 1, privacy: 2} diff --git a/app/models/project.rb b/app/models/project.rb index a91cf891d..feb0d3067 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -1,72 +1,73 @@ -# == Schema Information -# -# Table name: projects -# -# id :integer not null, primary key -# name :string(255) default(""), not null -# description :text(4294967295) -# homepage :string(255) default("") -# is_public :boolean default("1"), not null -# parent_id :integer -# created_on :datetime -# updated_on :datetime -# identifier :string(255) -# status :integer default("1"), not null -# lft :integer -# rgt :integer -# inherit_members :boolean default("0"), not null -# project_type :integer default("0") -# hidden_repo :boolean default("0"), not null -# attachmenttype :integer default("1") -# user_id :integer -# dts_test :integer default("0") -# enterprise_name :string(255) -# organization_id :integer -# project_new_type :integer -# gpid :integer -# forked_from_project_id :integer -# forked_count :integer default("0") -# publish_resource :integer default("0") -# visits :integer default("0") -# hot :integer default("0") -# invite_code :string(255) -# qrcode :string(255) -# qrcode_expiretime :integer default("0") -# script :text(65535) -# training_status :integer default("0") -# rep_identifier :string(255) -# project_category_id :integer -# project_language_id :integer -# license_id :integer -# ignore_id :integer -# praises_count :integer default("0") -# watchers_count :integer default("0") -# issues_count :integer default("0") -# pull_requests_count :integer default("0") -# language :string(255) -# versions_count :integer default("0") -# issue_tags_count :integer default("0") -# closed_issues_count :integer default("0") -# open_devops :boolean default("0") -# gitea_webhook_id :integer -# open_devops_count :integer default("0") -# recommend :boolean default("0") -# platform :integer default("0") -# -# Indexes -# -# index_projects_on_forked_from_project_id (forked_from_project_id) -# index_projects_on_identifier (identifier) -# index_projects_on_is_public (is_public) -# index_projects_on_lft (lft) -# index_projects_on_name (name) -# index_projects_on_platform (platform) -# index_projects_on_project_type (project_type) -# index_projects_on_recommend (recommend) -# index_projects_on_rgt (rgt) -# index_projects_on_status (status) -# index_projects_on_updated_on (updated_on) -# +# == Schema Information +# +# Table name: projects +# +# id :integer not null, primary key +# name :string(255) default(""), not null +# description :text(4294967295) +# homepage :string(255) default("") +# is_public :boolean default("1"), not null +# parent_id :integer +# created_on :datetime +# updated_on :datetime +# identifier :string(255) +# status :integer default("1"), not null +# lft :integer +# rgt :integer +# inherit_members :boolean default("0"), not null +# project_type :integer default("0") +# hidden_repo :boolean default("0"), not null +# attachmenttype :integer default("1") +# user_id :integer +# dts_test :integer default("0") +# enterprise_name :string(255) +# organization_id :integer +# project_new_type :integer +# gpid :integer +# forked_from_project_id :integer +# forked_count :integer default("0") +# publish_resource :integer default("0") +# visits :integer default("0") +# hot :integer default("0") +# invite_code :string(255) +# qrcode :string(255) +# qrcode_expiretime :integer default("0") +# script :text(65535) +# training_status :integer default("0") +# rep_identifier :string(255) +# project_category_id :integer +# project_language_id :integer +# license_id :integer +# ignore_id :integer +# praises_count :integer default("0") +# watchers_count :integer default("0") +# issues_count :integer default("0") +# pull_requests_count :integer default("0") +# language :string(255) +# versions_count :integer default("0") +# issue_tags_count :integer default("0") +# closed_issues_count :integer default("0") +# open_devops :boolean default("0") +# gitea_webhook_id :integer +# open_devops_count :integer default("0") +# recommend :boolean default("0") +# platform :integer default("0") +# +# Indexes +# +# index_projects_on_forked_from_project_id (forked_from_project_id) +# index_projects_on_identifier (identifier) +# index_projects_on_is_public (is_public) +# index_projects_on_lft (lft) +# index_projects_on_name (name) +# index_projects_on_platform (platform) +# index_projects_on_project_type (project_type) +# index_projects_on_recommend (recommend) +# index_projects_on_rgt (rgt) +# index_projects_on_status (status) +# index_projects_on_updated_on (updated_on) +# + class Project < ApplicationRecord include Matchable diff --git a/app/models/team.rb b/app/models/team.rb index 3e1de9ad8..82a3e88c1 100644 --- a/app/models/team.rb +++ b/app/models/team.rb @@ -23,6 +23,7 @@ class Team < ApplicationRecord belongs_to :organization + belongs_to :organization_extension, foreign_key: :organization_id, primary_key: :organization_id, counter_cache: :num_teams has_many :team_projects, dependent: :destroy has_many :team_units, dependent: :destroy has_many :team_users, dependent: :destroy diff --git a/app/views/organizations/organizations/_detail.json.jbuilder b/app/views/organizations/organizations/_detail.json.jbuilder index 0bf7c9896..99932b20d 100644 --- a/app/views/organizations/organizations/_detail.json.jbuilder +++ b/app/views/organizations/organizations/_detail.json.jbuilder @@ -8,5 +8,6 @@ json.visibility organization.visibility json.max_repo_creation organization.max_repo_creation json.num_projects organization.num_projects json.num_user organization.num_users +json.num_teams organization.num_teams json.avatar_url url_to_avatar(organization) json.created_at organization.created_on.strftime("%Y-%m-%d") \ No newline at end of file diff --git a/db/migrate/20210120081821_add_columns_to_organization_extension.rb b/db/migrate/20210120081821_add_columns_to_organization_extension.rb index 96089c9ce..4bcb4d9f3 100644 --- a/db/migrate/20210120081821_add_columns_to_organization_extension.rb +++ b/db/migrate/20210120081821_add_columns_to_organization_extension.rb @@ -2,5 +2,12 @@ class AddColumnsToOrganizationExtension < ActiveRecord::Migration[5.2] def change add_column :organization_extensions, :num_projects, :integer, default: 0 add_column :organization_extensions, :num_users, :integer, default: 0 + add_column :organization_extensions, :num_teams, :integer, default: 0 + + OrganizationExtension.find_each do |e| + OrganizationExtension.reset_counters(e.id, :organization_users) + OrganizationExtension.reset_counters(e.id, :projects) + OrganizationExtension.reset_counters(e.id, :teams) + end end end