package helper import ( "authentication/redisclient" "context" "encoding/json" "errors" "time" ) const defaultRedisTTLSeconds = 60 func SetJSON(ctx context.Context, key string, value interface{}, ttlSeconds *int) error { data, err := json.Marshal(value) if err != nil { return err } ttl := time.Duration(defaultRedisTTLSeconds) * time.Second if ttlSeconds != nil { ttl = time.Duration(*ttlSeconds) * time.Second } return redisclient.RDB.Set(ctx, key, data, ttl).Err() } func SlotSetJSON(ctx context.Context, key string, value interface{}, ttlSeconds *int) error { data, err := json.Marshal(value) if err != nil { return err } ttl := time.Duration(0) if ttlSeconds != nil { ttl = time.Duration(*ttlSeconds) * time.Second } return redisclient.RDB.Set(ctx, key, data, ttl).Err() } func GetJSON(ctx context.Context, key string, dest interface{}) error { val, err := redisclient.RDB.Get(ctx, key).Result() if err != nil { return err } return json.Unmarshal([]byte(val), dest) } func SetTTL(ctx context.Context, key string, ttlSeconds *int) error { ttl := time.Duration(defaultRedisTTLSeconds) * time.Second if ttlSeconds != nil { ttl = time.Duration(*ttlSeconds) * time.Second } res, err := redisclient.RDB.Expire(ctx, key, ttl).Result() if err != nil { return err } if !res { return errors.New("failed to set TTL: key does not exist") } return nil }