aboutsummaryrefslogtreecommitdiff
path: root/backend/fetchers/cache.go
diff options
context:
space:
mode:
authorGuillermo Serrahima <dev@vylion.com>2026-04-11 07:40:30 +0200
committerGuillermo Serrahima <dev@vylion.com>2026-04-11 23:39:19 +0200
commit9f0a9a6779f00786e4728ad5c3fad36814a293b0 (patch)
tree4b16d535c5d41ef46980608a88b7581be3c2bfd0 /backend/fetchers/cache.go
parentf6d60077b7cfc0d589fa7961e2bb59aea9f993a3 (diff)
downloadllostre-9f0a9a6779f00786e4728ad5c3fad36814a293b0.tar.xz
llostre-9f0a9a6779f00786e4728ad5c3fad36814a293b0.zip
project restructure
Diffstat (limited to 'backend/fetchers/cache.go')
-rw-r--r--backend/fetchers/cache.go166
1 files changed, 0 insertions, 166 deletions
diff --git a/backend/fetchers/cache.go b/backend/fetchers/cache.go
deleted file mode 100644
index ac91259..0000000
--- a/backend/fetchers/cache.go
+++ /dev/null
@@ -1,166 +0,0 @@
-package fetchers
-
-import (
- "context"
- "encoding/json"
- "fmt"
- "llostre/backend/notes"
- "sort"
- "time"
-
- "github.com/redis/go-redis/v9"
-)
-
-type Cache struct {
- client *redis.Client
- ctx context.Context
- expiryTime time.Duration
-}
-
-func NewCache(addr, password string, expiryMinutes int) (*Cache, error) {
- client := redis.NewClient(&redis.Options{
- Addr: addr,
- Password: password,
- DB: 0,
- })
-
- ctx := context.Background()
- if err := client.Ping(ctx).Err(); err != nil {
- return nil, fmt.Errorf("redis connection failed: %w", err)
- }
-
- return &Cache{
- client: client,
- ctx: ctx,
- expiryTime: time.Duration(expiryMinutes) * time.Minute,
- }, nil
-}
-
-func (c *Cache) Get(uri string) (*notes.Note, bool) {
- key := fmt.Sprintf("post:%s", uri)
- data, err := c.client.Get(c.ctx, key).Bytes()
- if err != nil {
- return nil, false
- }
-
- var note notes.Note
- if err := json.Unmarshal(data, &note); err != nil {
- return nil, false
- }
-
- return &note, true
-}
-
-func (c *Cache) Set(uri string, note *notes.Note) {
- key := fmt.Sprintf("post:%s", uri)
- data, err := json.Marshal(note)
- if err != nil {
- return
- }
-
- c.client.Set(c.ctx, key, data, c.expiryTime)
-}
-
-func (c *Cache) GetAuthor(did string) (*notes.Author, bool) {
- key := fmt.Sprintf("profile:%s", did)
- data, err := c.client.Get(c.ctx, key).Bytes()
- if err != nil {
- return nil, false
- }
-
- var author notes.Author
- if err := json.Unmarshal(data, &author); err != nil {
- return nil, false
- }
-
- return &author, true
-}
-
-func (c *Cache) SetAuthor(did string, author *notes.Author) {
- key := fmt.Sprintf("profile:%s", did)
- data, err := json.Marshal(author)
- if err != nil {
- return
- }
-
- c.client.Set(c.ctx, key, data, c.expiryTime)
-}
-
-func (c *Cache) GetCursor(did string) (string, bool) {
- key := fmt.Sprintf("cursor:%s", did)
- cursor, err := c.client.Get(c.ctx, key).Result()
- if err != nil {
- return "", false
- }
- return cursor, true
-}
-
-func (c *Cache) SetCursor(did, cursor string) {
- key := fmt.Sprintf("cursor:%s", did)
- if cursor == "" {
- c.client.Del(c.ctx, key)
- return
- }
- c.client.Set(c.ctx, key, cursor, 24*time.Hour)
-}
-
-func (c *Cache) GetPostsByDID(did string) ([]notes.Note, error) {
- pattern := fmt.Sprintf("post:at://%s/*", did)
- var posts []notes.Note
-
- iter := c.client.Scan(c.ctx, 0, pattern, 0).Iterator()
- for iter.Next(c.ctx) {
- data, err := c.client.Get(c.ctx, iter.Val()).Bytes()
- if err != nil {
- continue
- }
- var note notes.Note
- if err := json.Unmarshal(data, &note); err != nil {
- continue
- }
- posts = append(posts, note)
- }
-
- if err := iter.Err(); err != nil {
- return nil, err
- }
-
- sort.Slice(posts, func(i, j int) bool {
- return posts[i].CreatedAt.After(posts[j].CreatedAt)
- })
-
- return posts, nil
-}
-
-// track oldest sent post per profile
-func (c *Cache) GetOldestSent(did string) (time.Time, bool) {
- key := fmt.Sprintf("oldest_sent:%s", did)
- ts, err := c.client.Get(c.ctx, key).Int64()
- if err != nil {
- return time.Time{}, false
- }
- return time.Unix(ts, 0), true
-}
-
-func (c *Cache) SetOldestSent(did string, timestamp time.Time) {
- key := fmt.Sprintf("oldest_sent:%s", did)
- c.client.Set(c.ctx, key, timestamp.Unix(), 24*time.Hour)
-}
-
-// count posts older than timestamp for a profile
-func (c *Cache) CountPostsOlderThan(did string, timestamp time.Time) (int, error) {
- posts, err := c.GetPostsByDID(did)
- if err != nil {
- return 0, err
- }
- for i, p := range posts {
- if p.CreatedAt.Before(timestamp) {
- return len(posts) - i, nil
- }
- }
- return 0, nil
-}
-
-func (c *Cache) Close() error {
- return c.client.Close()
-}