diff --git a/apps/api/src/knowledge/knowledge.controller.ts b/apps/api/src/knowledge/knowledge.controller.ts index 27b1ad3..8819e23 100644 --- a/apps/api/src/knowledge/knowledge.controller.ts +++ b/apps/api/src/knowledge/knowledge.controller.ts @@ -30,8 +30,7 @@ import { KnowledgeCacheService } from "./services/cache.service"; export class KnowledgeController { constructor( private readonly knowledgeService: KnowledgeService, - private readonly linkSync: LinkSyncService, - private readonly cache: KnowledgeCacheService + private readonly linkSync: LinkSyncService ) {} /** diff --git a/apps/api/src/knowledge/services/cache.service.spec.ts b/apps/api/src/knowledge/services/cache.service.spec.ts index 2784b3d..2e38820 100644 --- a/apps/api/src/knowledge/services/cache.service.spec.ts +++ b/apps/api/src/knowledge/services/cache.service.spec.ts @@ -1,3 +1,4 @@ +import { describe, it, expect, beforeEach, afterEach } from 'vitest'; import { Test, TestingModule } from '@nestjs/testing'; import { KnowledgeCacheService } from './cache.service'; diff --git a/apps/api/src/knowledge/services/cache.service.ts b/apps/api/src/knowledge/services/cache.service.ts index ebe951a..1f7d7fa 100644 --- a/apps/api/src/knowledge/services/cache.service.ts +++ b/apps/api/src/knowledge/services/cache.service.ts @@ -37,7 +37,6 @@ export class KnowledgeCacheService implements OnModuleInit, OnModuleDestroy { private readonly ENTRY_PREFIX = 'knowledge:entry:'; private readonly SEARCH_PREFIX = 'knowledge:search:'; private readonly GRAPH_PREFIX = 'knowledge:graph:'; - private readonly STATS_PREFIX = 'knowledge:stats:'; // Default TTL from environment (default: 5 minutes) private readonly DEFAULT_TTL: number; @@ -113,7 +112,7 @@ export class KnowledgeCacheService implements OnModuleInit, OnModuleDestroy { /** * Get entry from cache by workspace and slug */ - async getEntry(workspaceId: string, slug: string): Promise { + async getEntry(workspaceId: string, slug: string): Promise { if (!this.cacheEnabled) return null; try { @@ -124,7 +123,7 @@ export class KnowledgeCacheService implements OnModuleInit, OnModuleDestroy { this.stats.hits++; this.updateHitRate(); this.logger.debug(`Cache HIT: ${key}`); - return JSON.parse(cached); + return JSON.parse(cached) as T; } this.stats.misses++; @@ -140,10 +139,10 @@ export class KnowledgeCacheService implements OnModuleInit, OnModuleDestroy { /** * Set entry in cache */ - async setEntry( + async setEntry( workspaceId: string, slug: string, - data: any, + data: T, options?: CacheOptions ): Promise { if (!this.cacheEnabled) return; @@ -182,11 +181,11 @@ export class KnowledgeCacheService implements OnModuleInit, OnModuleDestroy { /** * Get search results from cache */ - async getSearch( + async getSearch( workspaceId: string, query: string, - filters: Record - ): Promise { + filters: Record + ): Promise { if (!this.cacheEnabled) return null; try { @@ -197,7 +196,7 @@ export class KnowledgeCacheService implements OnModuleInit, OnModuleDestroy { this.stats.hits++; this.updateHitRate(); this.logger.debug(`Cache HIT: ${key}`); - return JSON.parse(cached); + return JSON.parse(cached) as T; } this.stats.misses++; @@ -213,11 +212,11 @@ export class KnowledgeCacheService implements OnModuleInit, OnModuleDestroy { /** * Set search results in cache */ - async setSearch( + async setSearch( workspaceId: string, query: string, - filters: Record, - data: any, + filters: Record, + data: T, options?: CacheOptions ): Promise { if (!this.cacheEnabled) return; @@ -254,11 +253,11 @@ export class KnowledgeCacheService implements OnModuleInit, OnModuleDestroy { /** * Get graph query results from cache */ - async getGraph( + async getGraph( workspaceId: string, entryId: string, maxDepth: number - ): Promise { + ): Promise { if (!this.cacheEnabled) return null; try { @@ -269,7 +268,7 @@ export class KnowledgeCacheService implements OnModuleInit, OnModuleDestroy { this.stats.hits++; this.updateHitRate(); this.logger.debug(`Cache HIT: ${key}`); - return JSON.parse(cached); + return JSON.parse(cached) as T; } this.stats.misses++; @@ -285,11 +284,11 @@ export class KnowledgeCacheService implements OnModuleInit, OnModuleDestroy { /** * Set graph query results in cache */ - async setGraph( + async setGraph( workspaceId: string, entryId: string, maxDepth: number, - data: any, + data: T, options?: CacheOptions ): Promise { if (!this.cacheEnabled) return; @@ -399,7 +398,7 @@ export class KnowledgeCacheService implements OnModuleInit, OnModuleDestroy { private getSearchKey( workspaceId: string, query: string, - filters: Record + filters: Record ): string { const filterHash = this.hashObject(filters); return `${this.SEARCH_PREFIX}${workspaceId}:${query}:${filterHash}`; @@ -419,7 +418,7 @@ export class KnowledgeCacheService implements OnModuleInit, OnModuleDestroy { /** * Hash an object to create a consistent string representation */ - private hashObject(obj: Record): string { + private hashObject(obj: Record): string { return JSON.stringify(obj, Object.keys(obj).sort()); }