Am I cleaning up the trade request object correctly?

Creating a trading system for my game so I’ve created like a trade request object that holds information about the trade like who sent it and how much time the reciever has too respond!

But what im wondering is if im cleaning up the object correctly? The only place its referenced is in the Cache.TradeRequests table

local TradeRequest = {}
TradeRequest.__index = TradeRequest

local Cache = require(game.ReplicatedStorage.Cache)

function TradeRequest.new(sender : Player, recipient : Player)
   local self = setmetatable({
      sender = sender,
      recipient = recipient,
      timeLeftToRespond = 20,
   }, TradeRequest)

   Cache.UpdateTradeRequest(sender, {
      sender = sender.Name,
      recipient = recipient.Name,
      timeLeftToRespond = self.timeLeftToRespond
   })

   self:startTimer()

   return self
end

-- This function is called every second to decrement the timeLeftToRespond
function TradeRequest:startTimer()
   while self.timeLeftToRespond > 0 do
      self.timeLeftToRespond -= 1
      print(self.timeLeftToRespond.. "left to respond!")
      Cache.UpdateTradeRequest(self.sender, {
         sender = self.sender.Name,
         recipient = self.recipient.Name,
         timeLeftToRespond = self.timeLeftToRespond
      })
      task.wait(1)
   end
   Cache.TradeRequests[tostring(self.sender.UserId)] = nil
   self = nil
end

return TradeRequest