diff options
| author | Guillermo Serrahima <dev@vylion.com> | 2026-03-17 15:56:17 +0100 |
|---|---|---|
| committer | Guillermo Serrahima <dev@vylion.com> | 2026-03-17 15:56:17 +0100 |
| commit | dd61c1d6c9e084e2a1aa266a538de11c48c762bc (patch) | |
| tree | 8cd0c261840563218381c444fa6e3b693d8fc76d /backend/fetchers/cache.go | |
| parent | 784fd55fb1b473a1d40911656008f099926c94a2 (diff) | |
| download | llostre-dd61c1d6c9e084e2a1aa266a538de11c48c762bc.tar.xz llostre-dd61c1d6c9e084e2a1aa266a538de11c48c762bc.zip | |
added some logging and caching
Diffstat (limited to 'backend/fetchers/cache.go')
| -rw-r--r-- | backend/fetchers/cache.go | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/backend/fetchers/cache.go b/backend/fetchers/cache.go new file mode 100644 index 0000000..12c68a8 --- /dev/null +++ b/backend/fetchers/cache.go @@ -0,0 +1,77 @@ +package fetchers + +import ( + "llostre/backend/notes" + "sync" + "time" +) + +type CacheEntry struct { + Note *notes.Note + ExpiresAt time.Time +} + +type Cache struct { + posts map[string]*CacheEntry + mu sync.RWMutex +} + +func NewCache() *Cache { + return &Cache{ + posts: make(map[string]*CacheEntry), + } +} + +func (c *Cache) Get(uri string) (*notes.Note, bool) { + c.mu.Lock() + defer c.mu.Unlock() + + entry, exists := c.posts[uri] + + if !exists { + return nil, false + } + + if time.Now().After(entry.ExpiresAt) { + delete(c.posts, uri) + return nil, false + } + + 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, + } +} + +func (c *Cache) GetMany(uris []string) map[string]*notes.Note { + c.mu.Lock() + defer c.mu.Unlock() + + result := make(map[string]*notes.Note) + now := time.Now() + + for _, uri := range uris { + entry, exists := c.posts[uri] + if !exists { + continue + } + + if now.After(entry.ExpiresAt) { + delete(c.posts, uri) + continue + } + + result[uri] = entry.Note + } + + return result +} |
