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 : 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


   return self

-- 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
   Cache.TradeRequests[tostring(self.sender.UserId)] = nil
   self = nil

return TradeRequest