diff options
| author | Bobby <[email protected]> | 2025-12-23 17:58:23 +0530 |
|---|---|---|
| committer | Bobby <[email protected]> | 2025-12-23 17:58:23 +0530 |
| commit | 5f691c04754ffd459b2ba0e434dc17585ba7c66c (patch) | |
| tree | c1eee98acfd8d2b02fba913d6d72a08531974432 /cache/folders.go | |
| parent | f1172d2d420aad2587c06277a589705f1fe43bea (diff) | |
| download | lain-5f691c04754ffd459b2ba0e434dc17585ba7c66c.tar.xz lain-5f691c04754ffd459b2ba0e434dc17585ba7c66c.zip | |
folder cache for faster loads
Diffstat (limited to 'cache/folders.go')
| -rw-r--r-- | cache/folders.go | 66 |
1 files changed, 66 insertions, 0 deletions
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 +} |
