From 1dc43a23b76211162458e0d4208a980049681932 Mon Sep 17 00:00:00 2001 From: viletyy Date: Fri, 15 Jan 2021 18:28:38 +0800 Subject: [PATCH] =?UTF-8?q?[FIX]=E4=B8=BA=E7=BB=84=E7=BB=87=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E9=A1=B9=E7=9B=AE=E5=81=9A=E5=87=86=E5=A4=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../version_releases_controller.rb | 2 +- app/jobs/sync_mirrored_repository_job.rb | 2 +- app/models/organization.rb | 7 +- app/models/owner.rb | 9 ++ app/models/project.rb | 144 +++++++++--------- app/models/repository.rb | 2 +- app/models/user.rb | 7 +- app/services/organizations/create_service.rb | 2 +- app/services/projects/fork_service.rb | 2 +- 9 files changed, 90 insertions(+), 87 deletions(-) create mode 100644 app/models/owner.rb diff --git a/app/controllers/version_releases_controller.rb b/app/controllers/version_releases_controller.rb index a9e7fa63a..1b56236a4 100644 --- a/app/controllers/version_releases_controller.rb +++ b/app/controllers/version_releases_controller.rb @@ -124,7 +124,7 @@ class VersionReleasesController < ApplicationController private def set_user - @user = @repository.user + @user = @repository.owner end def find_version diff --git a/app/jobs/sync_mirrored_repository_job.rb b/app/jobs/sync_mirrored_repository_job.rb index 8184ddee5..f0617146a 100644 --- a/app/jobs/sync_mirrored_repository_job.rb +++ b/app/jobs/sync_mirrored_repository_job.rb @@ -5,7 +5,7 @@ class SyncMirroredRepositoryJob < ApplicationJob repo = Repository.find_by(id: repo_id) current_user = User.find_by(id: user_id) return if repo.blank? || current_user.blank? - result = Gitea::Repository::SyncMirroredService.new(repo.user.login, repo.identifier, token: current_user.gitea_token).call + result = Gitea::Repository::SyncMirroredService.new(repo.owner.login, repo.identifier, token: current_user.gitea_token).call repo&.mirror.set_status! if result[:status] === 200 end end diff --git a/app/models/organization.rb b/app/models/organization.rb index 5a8594925..928f16c3a 100644 --- a/app/models/organization.rb +++ b/app/models/organization.rb @@ -58,8 +58,7 @@ # index_users_on_type (type) # -class Organization < ApplicationRecord - self.table_name = "users" +class Organization < Owner default_scope { where(type: "Organization") } has_one :organization_extension, dependent: :destroy @@ -74,8 +73,8 @@ class Organization < ApplicationRecord scope :with_visibility, ->(visibility) { joins(:organization_extension).where(organization_extensions: {visibility: visibility}) if visibility.present? } - def self.build(name) - self.create!(login: name) + def self.build(name, gitea_token=nil) + self.create!(login: name, gitea_token: gitea_token) end def is_owner?(user) diff --git a/app/models/owner.rb b/app/models/owner.rb new file mode 100644 index 000000000..9805b34fc --- /dev/null +++ b/app/models/owner.rb @@ -0,0 +1,9 @@ +class Owner < ApplicationRecord + self.table_name = "users" + + include ProjectOperable + include ProjectAbility + + has_many :projects, foreign_key: :user_id, dependent: :destroy + has_many :repositories, foreign_key: :user_id, dependent: :destroy +end \ No newline at end of file diff --git a/app/models/project.rb b/app/models/project.rb index 4b9e72e19..dd7babd17 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -1,73 +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 include Publicable @@ -85,7 +85,7 @@ class Project < ApplicationRecord belongs_to :ignore, optional: true belongs_to :license, optional: true - belongs_to :owner, class_name: 'User', foreign_key: :user_id, optional: true + belongs_to :owner, class_name: 'Owner', foreign_key: :user_id, optional: true belongs_to :project_category, optional: true , :counter_cache => true belongs_to :project_language, optional: true , :counter_cache => true has_many :project_trends, dependent: :destroy @@ -248,7 +248,7 @@ class Project < ApplicationRecord def self.find_with_namespace(namespace_path, identifier) logger.info "########namespace_path: #{namespace_path} ########identifier: #{identifier} " - user = User.find_by_login namespace_path + user = Owner.find_by_login namespace_path project = user&.projects&.find_by(identifier: identifier) || Project.find_by(identifier: "#{namespace_path}/#{identifier}") return nil if project.blank? diff --git a/app/models/repository.rb b/app/models/repository.rb index be6afcb10..934eaa0e3 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -33,7 +33,7 @@ class Repository < ApplicationRecord self.inheritance_column = nil # FIX The single-table inheritance mechanism failed belongs_to :project, :touch => true - belongs_to :user, optional: true + belongs_to :owner, class_name: 'Owner', foreign_key: :user_id, optional: true has_one :mirror, foreign_key: :repo_id has_one :ci_cloud_account, class_name: 'Ci::CloudAccount', foreign_key: :repo_id has_many :version_releases, dependent: :destroy diff --git a/app/models/user.rb b/app/models/user.rb index 4341f0c87..23f957d1a 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -58,15 +58,13 @@ # index_users_on_type (type) # -class User < ApplicationRecord +class User < Owner default_scope {where(type: %w(User AnonymousUser))} extend Enumerize include Watchable include Likeable include BaseModel - include ProjectOperable - include ProjectAbility include Droneable # include Searchable::Dependents::User @@ -155,9 +153,6 @@ class User < ApplicationRecord # 项目 has_many :applied_projects, dependent: :destroy - has_many :projects, dependent: :destroy - has_many :repositories, dependent: :destroy - # 教学案例 # has_many :libraries, dependent: :destroy has_many :project_trends, dependent: :destroy diff --git a/app/services/organizations/create_service.rb b/app/services/organizations/create_service.rb index da5fdd2d8..3da2951ff 100644 --- a/app/services/organizations/create_service.rb +++ b/app/services/organizations/create_service.rb @@ -47,7 +47,7 @@ class Organizations::CreateService < ApplicationService end def create_org_and_extension - @organization = Organization.build(params[:name]) + @organization = Organization.build(params[:name], user.gitea_token) org_extension = OrganizationExtension.build(organization.id, description, website, location, repo_admin_change_team_access, visibility, max_repo_creation) diff --git a/app/services/projects/fork_service.rb b/app/services/projects/fork_service.rb index 3efd3e43c..3204e5fc7 100644 --- a/app/services/projects/fork_service.rb +++ b/app/services/projects/fork_service.rb @@ -20,7 +20,7 @@ class Projects::ForkService < ApplicationService clone_project.save! new_repository = clone_project.repository - new_repository.user = @target_owner + new_repository.owner = @target_owner new_repository.identifier = @project.identifier new_repository.save!