feat: add knowledge graph views and stats (closes #73, closes #74)

Issue #73 - Entry-Centered Graph View:
- Added GET /api/knowledge/entries/:id/graph endpoint with depth parameter
- Returns entry + connected nodes with link relationships
- Created GraphService for graph traversal using BFS
- Added EntryGraphViewer component for frontend
- Integrated graph view tab into entry detail page

Issue #74 - Graph Statistics Dashboard:
- Added GET /api/knowledge/stats endpoint
- Returns overview stats (entries, tags, links by status)
- Includes most connected entries, recent activity, tag distribution
- Created StatsDashboard component with visual stats
- Added route at /knowledge/stats

Backend:
- GraphService: BFS-based graph traversal with configurable depth
- StatsService: Parallel queries for comprehensive statistics
- GraphQueryDto: Validation for depth parameter (1-5)
- Entity types for graph nodes/edges and statistics
- Unit tests for both services

Frontend:
- EntryGraphViewer: Entry-centered graph visualization
- StatsDashboard: Statistics overview with charts
- Graph view tab on entry detail page
- API client functions for new endpoints
- TypeScript strict typing throughout
This commit is contained in:
Jason Woltje
2026-01-29 23:25:29 -06:00
parent 59aec28d5c
commit 26a334c677
18 changed files with 1351 additions and 12 deletions

View File

@@ -4,13 +4,26 @@ import { AuthModule } from "../auth/auth.module";
import { KnowledgeService } from "./knowledge.service";
import { KnowledgeController } from "./knowledge.controller";
import { SearchController } from "./search.controller";
import { LinkResolutionService } from "./services/link-resolution.service";
import { SearchService } from "./services/search.service";
import { KnowledgeStatsController } from "./stats.controller";
import {
LinkResolutionService,
SearchService,
LinkSyncService,
GraphService,
StatsService,
} from "./services";
@Module({
imports: [PrismaModule, AuthModule],
controllers: [KnowledgeController, SearchController],
providers: [KnowledgeService, LinkResolutionService, SearchService],
controllers: [KnowledgeController, SearchController, KnowledgeStatsController],
providers: [
KnowledgeService,
LinkResolutionService,
SearchService,
LinkSyncService,
GraphService,
StatsService,
],
exports: [KnowledgeService, LinkResolutionService, SearchService],
})
export class KnowledgeModule {}