add cache logic on request