aboutsummaryrefslogtreecommitdiff
path: root/backend/fetchers/cache.go
diff options
context:
space:
mode:
Diffstat (limited to 'backend/fetchers/cache.go')
-rw-r--r--backend/fetchers/cache.go73
1 files changed, 53 insertions, 20 deletions
diff --git a/backend/fetchers/cache.go b/backend/fetchers/cache.go
index 12c68a8..b863d60 100644
--- a/backend/fetchers/cache.go
+++ b/backend/fetchers/cache.go
@@ -1,54 +1,55 @@
package fetchers
import (
+ "llostre/backend/general"
"llostre/backend/notes"
"sync"
"time"
)
type CacheEntry struct {
- Note *notes.Note
- ExpiresAt time.Time
+ Note *notes.Note
+ ExpiresAt time.Time
}
type Cache struct {
- posts map[string]*CacheEntry
- mu sync.RWMutex
+ posts map[string]*CacheEntry
+ profiles map[string]*ProfileCacheEntry
+ mu sync.RWMutex
}
func NewCache() *Cache {
return &Cache{
- posts: make(map[string]*CacheEntry),
+ posts: make(map[string]*CacheEntry),
+ profiles: make(map[string]*ProfileCacheEntry),
}
}
func (c *Cache) Get(uri string) (*notes.Note, bool) {
- c.mu.Lock()
- defer c.mu.Unlock()
+ c.mu.Lock()
+ defer c.mu.Unlock()
- entry, exists := c.posts[uri]
+ entry, exists := c.posts[uri]
- if !exists {
- return nil, false
- }
+ if !exists {
+ return nil, false
+ }
- if time.Now().After(entry.ExpiresAt) {
- delete(c.posts, uri)
- return nil, false
- }
+ if time.Now().After(entry.ExpiresAt) {
+ delete(c.posts, uri)
+ return nil, false
+ }
- return entry.Note, true
+ return entry.Note, true
}
func (c *Cache) Set(uri string, note *notes.Note) {
c.mu.Lock()
defer c.mu.Unlock()
- ttl := time.Now().Add(15 * time.Minute)
-
c.posts[uri] = &CacheEntry{
- Note: note,
- ExpiresAt: ttl,
+ Note: note,
+ ExpiresAt: time.Now().Add(15 * time.Minute),
}
}
@@ -75,3 +76,35 @@ func (c *Cache) GetMany(uris []string) map[string]*notes.Note {
return result
}
+
+type ProfileCacheEntry struct {
+ Profile *general.Profile
+ ExpiresAt time.Time
+}
+
+func (c *Cache) GetProfile(did string) (*general.Profile, bool) {
+ c.mu.Lock()
+ defer c.mu.Unlock()
+
+ entry, exists := c.profiles[did]
+ if !exists {
+ return nil, false
+ }
+
+ if time.Now().After(entry.ExpiresAt) {
+ delete(c.profiles, did)
+ return nil, false
+ }
+
+ return entry.Profile, true
+}
+
+func (c *Cache) SetProfile(did string, profile *general.Profile) {
+ c.mu.Lock()
+ defer c.mu.Unlock()
+
+ c.profiles[did] = &ProfileCacheEntry{
+ Profile: profile,
+ ExpiresAt: time.Now().Add(15 * time.Minute),
+ }
+}