add: member bind team user
This commit is contained in:
parent
d28eba6423
commit
8e79b43aaf
|
@ -21,13 +21,37 @@ module ProjectOperable
|
||||||
end
|
end
|
||||||
|
|
||||||
def add_member!(user_id, role_name='Developer')
|
def add_member!(user_id, role_name='Developer')
|
||||||
member = members.create!(user_id: user_id)
|
if self.owner.is_a?(Organization)
|
||||||
|
case role_name
|
||||||
|
when 'Manager'
|
||||||
|
team = self.owner.teams.admin.take
|
||||||
|
team = team.nil? ? Team.build(self.user_id, 'admin', '管理员', '', 'admin', false, false) : team
|
||||||
|
TeamProject.build(self.user_id, team.id, self.id)
|
||||||
|
OrganizationUser.build(self.user_id, user_id)
|
||||||
|
team_user = TeamUser.build(self.user_id, user_id, team.id)
|
||||||
|
when 'Developer'
|
||||||
|
team = self.owner.teams.write.take
|
||||||
|
team = team.nil? ? Team.build(self.user_id, 'developer', '开发者', '', 'write', false, false) : team
|
||||||
|
TeamProject.build(self.user_id, team.id, self.id)
|
||||||
|
OrganizationUser.build(self.user_id, user_id)
|
||||||
|
team_user = TeamUser.build(self.user_id, user_id, team.id)
|
||||||
|
when 'Reporter'
|
||||||
|
team = self.owner.teams.read.take
|
||||||
|
team = team.nil? ? Team.build(self.user_id, 'reporter', '报告者', '', 'read', false, false) : team
|
||||||
|
TeamProject.build(self.user_id, team.id, self.id)
|
||||||
|
OrganizationUser.build(self.user_id, user_id)
|
||||||
|
team_user = TeamUser.build(self.user_id, user_id, team.id)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
member = members.create!(user_id: user_id, team_user_id: team_user&.id)
|
||||||
set_developer_role(member, role_name)
|
set_developer_role(member, role_name)
|
||||||
end
|
end
|
||||||
|
|
||||||
def remove_member!(user_id)
|
def remove_member!(user_id)
|
||||||
member = members.find_by(user_id: user_id)
|
member = members.find_by(user_id: user_id)
|
||||||
member.destroy! if member && self.user_id != user_id
|
member.destroy! if member && self.user_id != user_id
|
||||||
|
team_user = TeamUser.find_by_id(member&.team_user_id)
|
||||||
|
team_user.destroy! if team_user
|
||||||
end
|
end
|
||||||
|
|
||||||
def member?(user_id)
|
def member?(user_id)
|
||||||
|
|
|
@ -11,11 +11,13 @@
|
||||||
# course_group_id :integer default("0")
|
# course_group_id :integer default("0")
|
||||||
# is_collect :integer default("1")
|
# is_collect :integer default("1")
|
||||||
# graduation_group_id :integer default("0")
|
# graduation_group_id :integer default("0")
|
||||||
|
# team_user_id :integer
|
||||||
#
|
#
|
||||||
# Indexes
|
# Indexes
|
||||||
#
|
#
|
||||||
# index_members_on_course_id (course_id)
|
# index_members_on_course_id (course_id)
|
||||||
# index_members_on_project_id (project_id)
|
# index_members_on_project_id (project_id)
|
||||||
|
# index_members_on_team_user_id (team_user_id)
|
||||||
# index_members_on_user_id (user_id)
|
# index_members_on_user_id (user_id)
|
||||||
# index_members_on_user_id_and_project_id (user_id,project_id,course_id) UNIQUE
|
# index_members_on_user_id_and_project_id (user_id,project_id,course_id) UNIQUE
|
||||||
#
|
#
|
||||||
|
@ -24,6 +26,7 @@ class Member < ApplicationRecord
|
||||||
belongs_to :user
|
belongs_to :user
|
||||||
# belongs_to :course, optional: true
|
# belongs_to :course, optional: true
|
||||||
belongs_to :project, optional: true
|
belongs_to :project, optional: true
|
||||||
|
belongs_to :team_user, optional: true
|
||||||
|
|
||||||
has_many :member_roles, dependent: :destroy
|
has_many :member_roles, dependent: :destroy
|
||||||
has_many :roles, through: :member_roles
|
has_many :roles, through: :member_roles
|
||||||
|
|
|
@ -22,9 +22,17 @@ class TeamUser < ApplicationRecord
|
||||||
belongs_to :team, counter_cache: :num_users
|
belongs_to :team, counter_cache: :num_users
|
||||||
belongs_to :user
|
belongs_to :user
|
||||||
|
|
||||||
|
has_one :member
|
||||||
|
|
||||||
validates :user_id, uniqueness: {scope: [:organization_id, :team_id]}
|
validates :user_id, uniqueness: {scope: [:organization_id, :team_id]}
|
||||||
|
|
||||||
|
before_destroy :remove_project_member
|
||||||
|
|
||||||
def self.build(organization_id, user_id, team_id)
|
def self.build(organization_id, user_id, team_id)
|
||||||
self.create!(organization_id: organization_id, user_id: user_id, team_id: team_id)
|
self.create!(organization_id: organization_id, user_id: user_id, team_id: team_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def remove_project_member
|
||||||
|
member.destroy if member.present?
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
class AddTeamUserToMembers < ActiveRecord::Migration[5.2]
|
||||||
|
def change
|
||||||
|
add_reference :members, :team_user
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue