diff options
Diffstat (limited to 'backend/fetchers/cache.go')
| -rw-r--r-- | backend/fetchers/cache.go | 73 |
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), + } +} |
