|
- # == 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
|