summaryrefslogtreecommitdiff
path: root/cache
diff options
context:
space:
mode:
authorBobby <[email protected]>2025-12-23 17:58:23 +0530
committerBobby <[email protected]>2025-12-23 17:58:23 +0530
commit5f691c04754ffd459b2ba0e434dc17585ba7c66c (patch)
treec1eee98acfd8d2b02fba913d6d72a08531974432 /cache
parentf1172d2d420aad2587c06277a589705f1fe43bea (diff)
downloadlain-5f691c04754ffd459b2ba0e434dc17585ba7c66c.tar.xz
lain-5f691c04754ffd459b2ba0e434dc17585ba7c66c.zip
folder cache for faster loads
Diffstat (limited to 'cache')
-rw-r--r--cache/folders.go66
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
+}