Implementing roles caching

Signed-off-by: Ethan Wellenreiter <ewellenreiter@gmail.com>
This commit is contained in:
Ethan Wellenreiter 2025-05-06 23:52:58 -04:00
parent 29bf0bec88
commit a99ef367c7

View File

@ -0,0 +1,47 @@
package cache
import (
"context"
"encoding/json"
"git.ewellenr.ca/receipt_indexer/backend/internal/storage"
"github.com/redis/go-redis/v9"
)
type RolesStore struct {
rdb *redis.Client
}
func (s *RolesStore) Get(ctx context.Context, name string) (*storage.Role, error) {
data, err := s.rdb.Get(ctx, name).Result()
if err == redis.Nil {
return nil, nil
} else if err != nil {
return nil, err
}
var role storage.Role
if data != "" {
err := json.Unmarshal([]byte(data), &role)
if err != nil {
return nil, err
}
}
return &role, nil
}
func (s *RolesStore) Set(ctx context.Context, role *storage.Role) error {
json, err := json.Marshal(role)
if err != nil {
return err
}
return s.rdb.Set(ctx, role.Name, json, RolesExpTime).Err()
}
func (s *RolesStore) Delete(ctx context.Context, name string) {
s.rdb.Del(ctx, name)
}