From c91c7843383897fa5a049bfe45545b48c4a4ba69 Mon Sep 17 00:00:00 2001 From: Ethan Wellenreiter Date: Wed, 7 May 2025 00:21:31 -0400 Subject: [PATCH] Redis image (struct not actual image) caching implementation Signed-off-by: Ethan Wellenreiter --- backend/internal/storage/cache/redis-image.go | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 backend/internal/storage/cache/redis-image.go diff --git a/backend/internal/storage/cache/redis-image.go b/backend/internal/storage/cache/redis-image.go new file mode 100644 index 0000000..1c00233 --- /dev/null +++ b/backend/internal/storage/cache/redis-image.go @@ -0,0 +1,55 @@ +package cache + +import ( + "context" + "encoding/json" + "fmt" + + "git.ewellenr.ca/receipt_indexer/backend/internal/storage" + "github.com/redis/go-redis/v9" +) + +type ReceiptImageStore struct { + rdb *redis.Client +} + +func (s *ReceiptImageStore) generateCacheKey(id int64) string { + return fmt.Sprintf("receiptimage-%d", id) +} + +func (s *ReceiptImageStore) Get(ctx context.Context, id int64) (*storage.Image, error) { + cacheKey := s.generateCacheKey(id) + + data, err := s.rdb.Get(ctx, cacheKey).Result() + if err == redis.Nil { + return nil, nil + } else if err != nil { + return nil, err + } + + var receiptimage storage.Image + if data != "" { + err := json.Unmarshal([]byte(data), &receiptimage) + if err != nil { + return nil, err + } + } + + return &receiptimage, nil +} + +func (s *ReceiptImageStore) Set(ctx context.Context, receiptimage *storage.Image) error { + cacheKey := s.generateCacheKey(receiptimage.ID) + + json, err := json.Marshal(receiptimage) + if err != nil { + return err + } + + return s.rdb.Set(ctx, cacheKey, json, ReceiptImageExpTime).Err() +} + +func (s *ReceiptImageStore) Delete(ctx context.Context, id int64) { + cacheKey := s.generateCacheKey(id) + s.rdb.Del(ctx, cacheKey) +}