From 5f691c04754ffd459b2ba0e434dc17585ba7c66c Mon Sep 17 00:00:00 2001 From: Bobby <30593201+luciferreeves@users.noreply.github.com> Date: Tue, 23 Dec 2025 17:58:23 +0530 Subject: folder cache for faster loads --- cache/folders.go | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 cache/folders.go (limited to 'cache') diff --git a/cache/folders.go b/cache/folders.go new file mode 100644 index 0000000..7ff54e6 --- /dev/null +++ b/cache/folders.go @@ -0,0 +1,66 @@ +package cache + +import ( + "lain/types" + "time" + + "github.com/gofiber/fiber/v2" +) + +var folders *types.FolderCache + +func init() { + folders = &types.FolderCache{ + Data: make(map[string]*types.FolderCacheEntry), + TTL: 5 * time.Minute, + } +} + +func GetFolders(userEmail string) ([]fiber.Map, bool) { + folders.Mu.RLock() + defer folders.Mu.RUnlock() + + entry, exists := folders.Data[userEmail] + if !exists { + return nil, false + } + + if time.Now().After(entry.ExpiresAt) { + return nil, false + } + + return entry.Folders, true +} + +func SetFolders(userEmail string, folderList []fiber.Map) { + folders.Mu.Lock() + defer folders.Mu.Unlock() + + now := time.Now() + folders.Data[userEmail] = &types.FolderCacheEntry{ + Folders: folderList, + CachedAt: now, + ExpiresAt: now.Add(folders.TTL), + } +} + +func InvalidateFolders(userEmail string) { + folders.Mu.Lock() + defer folders.Mu.Unlock() + + delete(folders.Data, userEmail) +} + +func InvalidateAllFolders() { + folders.Mu.Lock() + defer folders.Mu.Unlock() + + folders.Data = make(map[string]*types.FolderCacheEntry) +} + +func SetFolderTTL(duration time.Duration) { + folders.Mu.Lock() + defer folders.Mu.Unlock() + + folders.TTL = duration +} -- cgit v1.2.3