85 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
| # == Schema Information
 | |
| #
 | |
| # Table name: teams
 | |
| #
 | |
| #  id                     :integer          not null, primary key
 | |
| #  organization_id        :integer
 | |
| #  name                   :string(255)
 | |
| #  description            :string(255)
 | |
| #  authorize              :integer          default("0")
 | |
| #  num_projects           :integer          default("0")
 | |
| #  num_users              :integer          default("0")
 | |
| #  includes_all_project   :boolean          default("0")
 | |
| #  can_create_org_project :boolean          default("0")
 | |
| #  gtid                   :integer
 | |
| #  created_at             :datetime         not null
 | |
| #  updated_at             :datetime         not null
 | |
| #  nickname               :string(255)
 | |
| #
 | |
| # Indexes
 | |
| #
 | |
| #  index_teams_on_organization_id  (organization_id)
 | |
| #
 | |
| 
 | |
| 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
 | |
| 
 | |
|   scope :like, lambda { |keywords|
 | |
|     sql = "teams.nickname LIKE :search OR teams.name LIKE :search"
 | |
|     where(sql, :search => "%#{keywords.split(" ").join('|')}%") unless keywords.blank?
 | |
|   }
 | |
| 
 | |
|   validates :name, uniqueness: {scope: :organization_id}
 | |
| 
 | |
|   enum authorize: {read: 1, write: 2, admin: 3, owner: 4}
 | |
| 
 | |
|   def self.build(organization_id, name, nickname, description, authorize, includes_all_project, can_create_org_project)
 | |
|     self.create!(organization_id: organization_id,
 | |
|                  name: name,
 | |
|                  nickname: nickname, 
 | |
|                  description: description,
 | |
|                  authorize: authorize,
 | |
|                  includes_all_project: includes_all_project,
 | |
|                  can_create_org_project: can_create_org_project)
 | |
|   end
 | |
| 
 | |
|   def setup_team_project!
 | |
|     return unless includes_all_project
 | |
|     organization.projects.each do |project|
 | |
|       TeamProject.build(organization.id, id, project.id)
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def is_member?(user_id)
 | |
|     team_users.where(user_id: user_id).present?
 | |
|   end
 | |
| 
 | |
|   def authorize_name 
 | |
|     case self.authorize 
 | |
|     when 'read' then '读取'
 | |
|     when 'write' then '写入'
 | |
|     when 'admin' then '管理员'
 | |
|     when 'owner' then '管理员'
 | |
|     else 
 | |
|       ''
 | |
|     end
 | |
|   end
 | |
| 
 | |
| 
 | |
|   def to_gitea_hash
 | |
|     {
 | |
|       can_create_org_repo: self.can_create_org_project,
 | |
|       description: self.description || "",
 | |
|       includes_all_repositories: self.includes_all_project,
 | |
|       name: self.name,
 | |
|       permission: self.authorize,
 | |
|       units: self.team_units.pluck(:unit_type).map{|i| "repo.#{i}"}
 | |
|     }
 | |
|   end
 | |
| end
 |