import { Services } from "../lib/Services"; function stableStringify(obj: any): string { if (obj && typeof obj === "object" && !Array.isArray(obj)) { return `{${Object.keys(obj).sort().map(key => `"${key}":${stableStringify(obj[key])}`).join(",")}}`; } return JSON.stringify(obj); } function generateCacheKey(...args: any[]): string { return stableStringify(args); } // console.log(generateCacheKey("user", 123, true, { role: "admin", permissions: ["read", "write"] })); // console.log(generateCacheKey("user", 123, true, { permissions: ["read", "write"], role: "admin" })); export function Cache(/* cacheKey?: string | string[] */) { return function ( target: any, propertyKey: string, descriptor: PropertyDescriptor ) { const originalMethod = descriptor.value; descriptor.value = async function (...args: any[]) { const className = target.constructor.name.toLowerCase(); // Metod adı const methodName = propertyKey.toLowerCase(); const cacheKeys: any[] = [target.__cacheKeys || []].reverse(); console.log("Defined cache keys:", cacheKeys); const cacheKey = ['admin', className, propertyKey]; if (cacheKeys.length > 0) { for (let i = 0; i < cacheKeys.length; i++) { const keyIndex = cacheKeys[i]['parameterIndex']; if (args != null && args[keyIndex] != null) { const key = args[keyIndex].toString(); cacheKey.push(key); } } } else if (args.length > 0) { //cacheKey belirtilmemisse tum parametreleri kullan for (let i = 0; i < args.length; i++) { const key = args[i].toString(); cacheKey.push(key); } } // Cache key'i dizeye dönüştür // const key = Array.isArray(cacheKey) ? cacheKey.join(':') : cacheKey; // Cache'ten veri al let cachedData = await Services.Cache.load(cacheKey); if (cachedData != null) { return cachedData; // Cache'teki veriyi döndür } // Orijinal metodu çağır ve dönen değeri cache'e kaydet const result = await originalMethod.apply(this, args); // Cache'e kaydet (asenkron yapılır, beklenmez) Services.Cache.save(cacheKey, result); console.log('------------------------------Cache executed..') return result; }; return descriptor; }; } /* const cacheKeys: any[] = target.__cacheKeys || []; console.log("Defined cache keys:", [...cacheKeys].reverse()); const className = target.constructor.name.toLowerCase(); // Metod adı const methodName = propertyKey.toLowerCase(); debugger const cacheKey = ['admin', className, propertyKey]; if (cacheKey.length > 0) { for (let i = 0; i < cacheKeys.length; i++) { const keyIndex = cacheKeys[i]['parameterIndex']; if (args != null && args[keyIndex] != null) { const key = args[keyIndex].toString(); cacheKey.push(key); } } } else if (args.length > 0) { //cacheKey belirtilmemisse tum parametreleri kullan for (let i = 0; i < args.length; i++) { const key = args[i].toString(); cacheKey.push(key); } } */