module Teams class StaffAssignment def self.call(team:, user:, staff_kind: "transmission", membership: nil) new(team: team, user: user, staff_kind: staff_kind, membership: membership).call end def initialize(team:, user:, staff_kind: "transmission", membership: nil) @team = team @user = user @staff_kind = "transmission" @membership = membership end def call StaffEmailValidator.assert_available!( team: @team, email: @user.email, except_user: @user ) ut = @membership || @user.user_teams.find_by!(team: @team) return ut if ut.staff_kind == "transmission" Entitlements.new(@team).assert_can_invite! ut.update!(staff_kind: "transmission") ut end end end