From 0b96d59285ef3d268ea104718c52aa0004279ba4 Mon Sep 17 00:00:00 2001 From: chamikaJ Date: Mon, 7 Jul 2025 13:22:17 +0530 Subject: [PATCH] refactor(tasks-controller): remove Redis caching logic for task retrieval - Eliminated caching logic from the TasksControllerV2 to streamline task retrieval and improve performance. - Updated response handling to directly return task data without caching, enhancing clarity and reducing complexity. - Removed cache invalidation method to simplify the controller's responsibilities. --- .../src/controllers/tasks-controller-v2.ts | 68 ++----------------- 1 file changed, 5 insertions(+), 63 deletions(-) diff --git a/worklenz-backend/src/controllers/tasks-controller-v2.ts b/worklenz-backend/src/controllers/tasks-controller-v2.ts index 2bad811c..f1616740 100644 --- a/worklenz-backend/src/controllers/tasks-controller-v2.ts +++ b/worklenz-backend/src/controllers/tasks-controller-v2.ts @@ -8,7 +8,6 @@ import { ServerResponse } from "../models/server-response"; import { TASK_PRIORITY_COLOR_ALPHA, TASK_STATUS_COLOR_ALPHA, UNMAPPED } from "../shared/constants"; import { getColor, log_error } from "../shared/utils"; import TasksControllerBase, { GroupBy, ITaskGroup } from "./tasks-controller-base"; -import { redisClient } from "../redis/client"; export class TaskListGroup implements ITaskGroup { name: string; @@ -1051,36 +1050,6 @@ export default class TasksControllerV2 extends TasksControllerBase { // Only refresh if explicitly requested via refresh_progress=true query parameter // This dramatically improves initial load performance (from ~2-5s to ~200-500ms) const shouldRefreshProgress = req.query.refresh_progress === "true"; - - // CACHING OPTIMIZATION: Cache results for frequently accessed data - const cacheKey = `tasks_v3_${req.params.id}_${groupBy}_${JSON.stringify({ - parent_task: req.query.parent_task, - archived: req.query.archived, - search: req.query.search, - statuses: req.query.statuses, - priorities: req.query.priorities, - labels: req.query.labels, - members: req.query.members, - projects: req.query.projects, - filterBy: req.query.filterBy, - customColumns: req.query.customColumns, - isSubtasksInclude: req.query.isSubtasksInclude - })}`; - - // Try to get cached result first (only if not refreshing progress) - if (!shouldRefreshProgress) { - try { - const cachedResult = await redisClient.get(cacheKey); - if (cachedResult) { - const parsedResult = JSON.parse(cachedResult); - console.log(`[PERFORMANCE] Cache hit for project ${req.params.id} - returned in ${(performance.now() - startTime).toFixed(2)}ms`); - return res.status(200).send(parsedResult); - } - } catch (cacheError) { - console.warn("[CACHE WARNING] Redis cache read failed:", cacheError); - // Continue with normal query if cache fails - } - } if (shouldRefreshProgress && req.params.id) { const progressStartTime = performance.now(); @@ -1316,26 +1285,14 @@ export default class TasksControllerV2 extends TasksControllerBase { console.warn(`[PERFORMANCE WARNING] Slow request detected: ${totalTime.toFixed(2)}ms for project ${req.params.id} with ${transformedTasks.length} tasks`); } - const responseData = new ServerResponse(true, { + console.log(`[PERFORMANCE] getTasksV3 completed in ${totalTime.toFixed(2)}ms for project ${req.params.id} with ${transformedTasks.length} tasks`); + + return res.status(200).send(new ServerResponse(true, { groups: responseGroups, allTasks: transformedTasks, grouping: groupBy, totalTasks: transformedTasks.length - }); - - // Cache the result for 5 minutes (300 seconds) - only cache successful results - if (transformedTasks.length > 0) { - try { - await redisClient.setEx(cacheKey, 300, JSON.stringify(responseData)); - console.log(`[PERFORMANCE] Cached result for project ${req.params.id} with ${transformedTasks.length} tasks`); - } catch (cacheError) { - console.warn("[CACHE WARNING] Redis cache write failed:", cacheError); - // Continue even if cache write fails - } - } - - console.log(`[PERFORMANCE] getTasksV3 completed in ${totalTime.toFixed(2)}ms for project ${req.params.id} with ${transformedTasks.length} tasks`); - return res.status(200).send(responseData); + })); } private static getDefaultGroupColor(groupBy: string, groupValue: string): string { @@ -1434,20 +1391,5 @@ export default class TasksControllerV2 extends TasksControllerBase { } } - // Helper method to invalidate cache when tasks are modified - public static async invalidateTasksCache(projectId: string): Promise { - try { - // Get all cache keys for this project - const pattern = `tasks_v3_${projectId}_*`; - const keys = await redisClient.keys(pattern); - - if (keys.length > 0) { - await redisClient.del(keys); - console.log(`[CACHE] Invalidated ${keys.length} cache entries for project ${projectId}`); - } - } catch (error) { - console.warn("[CACHE WARNING] Cache invalidation failed:", error); - // Don't throw error - cache invalidation failure shouldn't break the operation - } - } + }