From 81bacdf5df8d69de414201f9dfccbf2afec28b4b Mon Sep 17 00:00:00 2001 From: akshat mittal Date: Sat, 10 Jan 2026 18:24:15 +0200 Subject: [PATCH] fix: remove TanStack cache invalidation to prevent stale data overwrites --- src/app/teams/[teamId]/hooks/use-create-role.tsx | 4 ---- src/app/teams/[teamId]/hooks/use-delete-role.tsx | 5 ----- src/components/role/role-card.tsx | 7 ------- src/hooks/use-optimistic-role-update.ts | 7 ------- src/server/api/routers/metric.ts | 8 ++++++-- 5 files changed, 6 insertions(+), 25 deletions(-) diff --git a/src/app/teams/[teamId]/hooks/use-create-role.tsx b/src/app/teams/[teamId]/hooks/use-create-role.tsx index 770fed00..661a3390 100644 --- a/src/app/teams/[teamId]/hooks/use-create-role.tsx +++ b/src/app/teams/[teamId]/hooks/use-create-role.tsx @@ -222,10 +222,6 @@ export function useCreateRole({ }); setNodes(updatedNodes); } - - // Invalidate caches for background refresh - void utils.team.getById.invalidate({ id: teamId }); - void utils.role.getByTeamId.invalidate({ teamId }); }, onError: (error, _variables, context) => { if (context?.previousRoles !== undefined) { diff --git a/src/app/teams/[teamId]/hooks/use-delete-role.tsx b/src/app/teams/[teamId]/hooks/use-delete-role.tsx index fd290d35..4d6be8d8 100644 --- a/src/app/teams/[teamId]/hooks/use-delete-role.tsx +++ b/src/app/teams/[teamId]/hooks/use-delete-role.tsx @@ -79,10 +79,5 @@ export function useDeleteRole(teamId: string) { setEdges?.(context.previousEdges); } }, - onSettled: () => { - void utils.role.getByTeamId.invalidate({ teamId }); - // Invalidate team.getById cache to ensure fresh data on next fetch - void utils.team.getById.invalidate({ id: teamId }); - }, }); } diff --git a/src/components/role/role-card.tsx b/src/components/role/role-card.tsx index c24adc9a..1dc7268a 100644 --- a/src/components/role/role-card.tsx +++ b/src/components/role/role-card.tsx @@ -137,13 +137,6 @@ function RoleCardComponent({ utils.role.getByTeamId.setData({ teamId }, context.previousRoles); } }, - onSettled: () => { - if (teamId) { - void utils.role.getByTeamId.invalidate({ teamId }); - void utils.team.getById.invalidate({ id: teamId }); - void utils.dashboard.getDashboardCharts.invalidate({ teamId }); - } - }, }); const handleDelete = useCallback(async () => { diff --git a/src/hooks/use-optimistic-role-update.ts b/src/hooks/use-optimistic-role-update.ts index 229fac66..9f4de400 100644 --- a/src/hooks/use-optimistic-role-update.ts +++ b/src/hooks/use-optimistic-role-update.ts @@ -218,13 +218,6 @@ export function useOptimisticRoleUpdate(teamId: string) { return chart; }); }); - - // Delayed invalidation for eventual consistency - // Wait for Prisma Accelerate cache propagation before background refresh - setTimeout(() => { - void utils.role.getByTeamId.invalidate({ teamId }); - void utils.dashboard.getDashboardCharts.invalidate({ teamId }); - }, 5000); }, onError: (error, _vars, context) => { diff --git a/src/server/api/routers/metric.ts b/src/server/api/routers/metric.ts index 903aacbf..a06e187d 100644 --- a/src/server/api/routers/metric.ts +++ b/src/server/api/routers/metric.ts @@ -9,7 +9,10 @@ import { getMetricAndVerifyAccess, getTeamAndVerifyAccess, } from "@/server/api/utils/authorization"; -import { invalidateDashboardCache } from "@/server/api/utils/cache-strategy"; +import { + invalidateCacheByTags, + invalidateDashboardCache, +} from "@/server/api/utils/cache-strategy"; import { runBackgroundTask } from "./pipeline"; @@ -267,12 +270,13 @@ export const metricRouter = createTRPCRouter({ where: { id: input.id }, }); - // Invalidate Prisma cache for dashboard queries + // Invalidate Prisma cache for dashboard and role queries await invalidateDashboardCache( ctx.db, metric.organizationId, metric.teamId, ); + await invalidateCacheByTags(ctx.db, [`team_${metric.teamId}`]); return { success: true }; }),