dressed_for_succes_store/frontend/lib/api-cache.ts
2025-04-27 03:00:13 +07:00

108 lines
3.0 KiB
TypeScript

import { QueryClient } from '@tanstack/react-query';
/**
* Ключи кэша для различных типов данных
*/
export const cacheKeys = {
// Дашборд
dashboardStats: 'dashboard-stats',
recentOrders: 'recent-orders',
popularProducts: 'popular-products',
// Каталог
products: 'products',
product: (id: number | string) => ['product', id.toString()],
categories: 'categories',
collections: 'collections',
sizes: 'sizes',
// Заказы
orders: 'orders',
order: (id: number | string) => ['order', id.toString()],
// Пользователи
customers: 'customers',
customer: (id: number | string) => ['customer', id.toString()],
};
/**
* Функция для инвалидации кэша при изменении данных
* @param keys Массив ключей кэша для инвалидации
*/
export function invalidateCache(queryClient: QueryClient, keys: string | string[] | (string | string[])[]): void {
const keysArray = Array.isArray(keys) ? keys : [keys];
keysArray.forEach(key => {
if (Array.isArray(key)) {
queryClient.invalidateQueries({ queryKey: key });
} else {
queryClient.invalidateQueries({ queryKey: [key] });
}
});
}
/**
* Функция для инвалидации кэша продуктов
*/
export function invalidateProductsCache(queryClient: QueryClient): void {
invalidateCache(queryClient, [
cacheKeys.products,
cacheKeys.popularProducts,
// Также инвалидируем связанные данные
cacheKeys.dashboardStats
]);
}
/**
* Функция для инвалидации кэша заказов
*/
export function invalidateOrdersCache(queryClient: QueryClient): void {
invalidateCache(queryClient, [
cacheKeys.orders,
cacheKeys.recentOrders,
// Также инвалидируем связанные данные
cacheKeys.dashboardStats
]);
}
/**
* Функция для инвалидации кэша категорий
*/
export function invalidateCategoriesCache(queryClient: QueryClient): void {
invalidateCache(queryClient, [
cacheKeys.categories,
// Также инвалидируем связанные данные
cacheKeys.products
]);
}
/**
* Функция для инвалидации кэша коллекций
*/
export function invalidateCollectionsCache(queryClient: QueryClient): void {
invalidateCache(queryClient, [
cacheKeys.collections,
// Также инвалидируем связанные данные
cacheKeys.products
]);
}
/**
* Функция для инвалидации кэша размеров
*/
export function invalidateSizesCache(queryClient: QueryClient): void {
invalidateCache(queryClient, [
cacheKeys.sizes
]);
}
export default {
cacheKeys,
invalidateCache,
invalidateProductsCache,
invalidateOrdersCache,
invalidateCategoriesCache,
invalidateCollectionsCache,
invalidateSizesCache
};