# Story 5.1: Cache System (Redis) ## Metadata - **Story ID**: 5.1 - **Title**: Cache System (Redis) - **Epic**: 5 - Infrastructure Adapters - **Status**: Pending - **Priority**: High - **Estimated Time**: 4-5 hours - **Dependencies**: 1.1 ## Goal Implement a complete Redis-based caching system with a clean interface that can be swapped for other cache implementations. ## Description This story implements a Redis cache adapter with a clean interface, allowing modules to cache data efficiently. The cache system supports TTL, key-based operations, and optional cache middleware for HTTP responses. ## Deliverables ### 1. Cache Interface (`pkg/infra/cache/cache.go`) - `Cache` interface with: - `Get(ctx context.Context, key string) ([]byte, error)` - `Set(ctx context.Context, key string, value []byte, ttl time.Duration) error` - `Delete(ctx context.Context, key string) error` - `Exists(ctx context.Context, key string) (bool, error)` - `Clear(ctx context.Context) error` ### 2. Redis Implementation (`internal/infra/cache/redis_cache.go`) - Redis client setup - Connection pooling - All interface methods implemented - Error handling - Connection health checks ### 3. Configuration - Redis config in `config/default.yaml`: - Connection URL - Pool settings - Default TTL ### 4. DI Integration - Provider function for Cache - Register in DI container ### 5. Optional Cache Middleware - HTTP response caching middleware - Configurable cache keys - TTL per route ## Acceptance Criteria - [ ] Cache interface is defined - [ ] Redis implementation works correctly - [ ] Cache operations (get, set, delete) work - [ ] TTL is respected - [ ] Cache is injectable via DI - [ ] Configuration is loaded from config - [ ] Optional middleware works ## Files to Create/Modify - `pkg/infra/cache/cache.go` - Cache interface - `internal/infra/cache/redis_cache.go` - Redis implementation - `internal/di/providers.go` - Add cache provider - `config/default.yaml` - Add Redis config