Is my player collision script good?

So, this is what I’ve written to manage my player collision groups.

local playerCollision = {}

local PhysicsService = game:GetService("PhysicsService")

local Players = game:GetService("Players")

PhysicsService:CreateCollisionGroup("Players")
PhysicsService:CollisionGroupSetCollidable("Players", "Players", false)

playerCollision.currentCharacterCollisionGroup = {}

local previousCollisionGroups = {}

local collisionGroupSet = {}

function playerCollision.setCharacterCollisionGroup(character, collisionGroupName)
	playerCollision.currentCharacterCollisionGroup[character] = collisionGroupName
	if character:IsA("BasePart") then
		PhysicsService:SetPartCollisionGroup(character, collisionGroupName)
		if not collisionGroupSet[character] then
			previousCollisionGroups[character] = character.CollisionGroupId
			collisionGroupSet[character] = true
		end
	end
	for _,descendant in pairs(character:GetDescendants()) do
		if descendant:IsA("BasePart") then
			PhysicsService:SetPartCollisionGroup(descendant, collisionGroupName)
			if not collisionGroupSet[descendant] then
				previousCollisionGroups[descendant] = descendant.CollisionGroupId
				collisionGroupSet[descendant] = true
			end
		end
	end
end

function playerCollision.setPartCollisionGroup(object, collisionGroupName)
	if object:IsA("BasePart") then
		if not collisionGroupSet[object] then
			previousCollisionGroups[object] = object.CollisionGroupId
			collisionGroupSet[object] = true
		end
		PhysicsService:SetPartCollisionGroup(object, collisionGroupName)
	end
end

function playerCollision.resetCollisionGroup(object)
	print("hpaodsf")
	if object:IsA("BasePart") then
		local previousCollisionGroupId = previousCollisionGroups[object]
		if not previousCollisionGroupId then return end 

		collisionGroupSet[object] = nil
		local previousCollisionGroupName = PhysicsService:GetCollisionGroupName(previousCollisionGroupId)
		PhysicsService:SetPartCollisionGroup(object, previousCollisionGroupName)
	end
end

function playerCollision.run()
	local function onCharacterAdded(character)
		if playerCollision.currentCharacterCollisionGroup[character] then
			playerCollision.setCharacterCollisionGroup(character, playerCollision.currentCharacterCollisionGroup[character])
		else -- If the character spawns for the first time.
			playerCollision.setCharacterCollisionGroup(character, "Players")
		end

		character.DescendantAdded:Connect(function(object)
			playerCollision.setPartCollisionGroup(object, playerCollision.currentCharacterCollisionGroup[character])
		end)

		character.DescendantRemoving:Connect(playerCollision.resetCollisionGroup)
	end
	
	local function onPlayerAdded(player)
		local characterAddedEvent
		characterAddedEvent = player.CharacterAdded:Connect(onCharacterAdded)
	end

	Players.PlayerAdded:Connect(onPlayerAdded)
end

return playerCollision

I was thinking, maybe I should move the stuff in playerCollision.run() into another script?

Tell me if you find something I should rewrite