import { cache } from './redis'; // API Response caching export const apiCache = { async getProjects() { return await cache.get('api:projects'); }, async setProjects(projects: unknown, ttlSeconds = 300) { return await cache.set('api:projects', projects, ttlSeconds); }, async getProject(id: number) { return await cache.get(`api:project:${id}`); }, async setProject(id: number, project: unknown, ttlSeconds = 300) { return await cache.set(`api:project:${id}`, project, ttlSeconds); }, async invalidateProject(id: number) { await cache.del(`api:project:${id}`); await cache.del('api:projects'); }, async invalidateAll() { await cache.del('api:projects'); // Clear all project caches const keys = await this.getAllProjectKeys(); for (const key of keys) { await cache.del(key); } }, async getAllProjectKeys() { // This would need to be implemented with Redis SCAN // For now, we'll use a simple approach return []; } }; // Performance metrics caching export const performanceCache = { async getMetrics(url: string) { return await cache.get(`perf:${url}`); }, async setMetrics(url: string, metrics: unknown, ttlSeconds = 600) { return await cache.set(`perf:${url}`, metrics, ttlSeconds); }, async getWebVitals() { return await cache.get('perf:webvitals'); }, async setWebVitals(vitals: unknown, ttlSeconds = 300) { return await cache.set('perf:webvitals', vitals, ttlSeconds); } }; // User session caching export const userCache = { async getSession(sessionId: string) { return await cache.get(`user:session:${sessionId}`); }, async setSession(sessionId: string, data: unknown, ttlSeconds = 86400) { return await cache.set(`user:session:${sessionId}`, data, ttlSeconds); }, async deleteSession(sessionId: string) { return await cache.del(`user:session:${sessionId}`); }, async getUserPreferences(userId: string) { return await cache.get(`user:prefs:${userId}`); }, async setUserPreferences(userId: string, prefs: unknown, ttlSeconds = 86400) { return await cache.set(`user:prefs:${userId}`, prefs, ttlSeconds); } };