DataStore not saving Values in folders for my inventory data script

So the datastore is not working, its suppose to save the values in my folder in the player, if the value is true then it means the player has the item. However nothing saves.

Data

    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local DataStoreService = game:GetService("DataStoreService")
    local myDataStore = DataStoreService:GetDataStore("myDataStore")
    local Folder = ReplicatedStorage:WaitForChild("DataStore")

--functions--
local function GetDS(Value, Player)
	local Data;	
	local DataFetchSuccess, ErrorMessage = pcall(function()
		Data = myDataStore:GetAsync(Player.UserId.."-Inventory")
	end)
		
	if DataFetchSuccess then
		if Data == nil and Value.Name == "DeafultKnife" or Value.Name == "DeafultFlashlight" or Value.Name == "Clown" then
			Value.Value = true
		elseif Data == nil and Value.Name == "Skin" then
			Value.Value = "Clown"
		elseif Data == nil and Value.ClassName == "StringValue" then
			Value.Value = ("Deafult"..Value.Name)
		elseif Data == nil and Value.ClassName == "BoolValue" then
			Value.Value = false
		elseif Data == nil and Value.ClassName == "NumberValue" then
			Value.Value = 0
		else
			Value.Value = Data
		end
	end
end

local function SetDS(Value, Player)
	local Data 
	
	repeat wait() until Data
	
		local DataWriteSuccess, ErrorMessage = pcall(function()
			Data = myDataStore:SetAsync(Player.UserId.."-Inventory")
		end)
		
		if not DataWriteSuccess then
			local Retry = 0
		
			while Retry < 6 do
				wait(60)
				local Succeded, Error = pcall(function()
				Data = myDataStore:SetAsync(Player.UserId.."-Inventory")
				end)
				if Succeded then break end
				Retry = Retry + 1
		end
	end
end

local function CheckChildren(Key, Children, Player)
	for i = 1, #Children do
		if Children[i].ClassName == "Folder" then
			local C = Children[i]:GetChildren()
			if C then
				CheckChildren(Key, C, Player)
			end
		else
			if Key == "GetDS" then
				GetDS(Children[i], Player)
			else
				SetDS(Children[i], Player)
			end
		end
	end
end

game.Players.PlayerAdded:Connect(function(Player)
	
	--//Loading DataStores\\--
	local Clone = Folder:Clone()
	Clone.Parent = Player
	local FolderChildren = Clone:GetChildren()
	CheckChildren("GetDS", FolderChildren, Player)
	
	-------------------
	print("DataStore Loaded")
	
	--CanSaveValue--
	local CanSave = Instance.new("BoolValue",Player)
	CanSave.Name = "CanSaveData"
	CanSave.Value = true
	
end)

game.Players.PlayerRemoving:Connect(function(Player)
	local Clone = Player:FindFirstChild("DataStore")
	if Clone then
	local CloneChildren = Clone:GetChildren()
	CheckChildren("SetDS", CloneChildren, Player)
	end
	print("Saved DataStore")
end)

well first of all in the SetDS you are saving the data wrong in the function where you are using the SetAsyc() and you wrapped it in the pcall function incorrectly and you are missing the value parameter, this is how it must be done

local DataWriteSuccess, ErrorMessage = pcall(function()
	return myDataStore:SetAsync(Player.UserId.."-Inventory",Value)
end)

and second of all you are overwriting the saved data numerous time. In the checkChildren function you are looping through all the values in the folder and saving them repeatedly under the same datastore with the same key. Instead what you need to do is store all the data in a table and save the table.

btw the way (I am not trying to sound harsh), I recommend remaking your system from scratch as there are many errors throughout your code. the GetDS function also has errors. In addition, I would recommend that you make a module script that stores all the client data rather than having them parented to player (for security reasons) you could have a server-sided module and a client sided one and whenever the table is changed on the server you could fire a remote event to update the value on the client. (I use this in a project i am working on and it does the job perfectly)