/** * Module Registry - Track all backend modules and their frontend connections * * This registry ensures no backend modules get lost during migration. * Each module entry defines: * - Backend service and endpoints * - Frontend pages that use it * - Connection status (connected, partial, not connected) * * Module definitions live in ./module-registry-data.ts * This file exports the type, re-exports the data, and provides helper functions. */ export interface BackendModule { id: string name: string description: string category: 'compliance' | 'ai' | 'infrastructure' | 'education' | 'communication' | 'development' backend: { service: string // e.g. 'consent-service', 'python-backend', 'klausur-service' port: number basePath: string endpoints: { path: string method: string description: string }[] } frontend: { adminV2Page?: string // New admin-v2 page path oldAdminPage?: string // Old admin page path (for reference) status: 'connected' | 'partial' | 'not-connected' | 'deprecated' } dependencies?: string[] // IDs of other modules this depends on priority: 'critical' | 'high' | 'medium' | 'low' notes?: string } // Re-export data from the data file export { MODULE_REGISTRY } from './module-registry-data' // Import for use in helper functions import { MODULE_REGISTRY } from './module-registry-data' // Helper functions export function getModulesByCategory(category: BackendModule['category']): BackendModule[] { return MODULE_REGISTRY.filter(m => m.category === category) } export function getConnectedModules(): BackendModule[] { return MODULE_REGISTRY.filter(m => m.frontend.status === 'connected') } export function getNotConnectedModules(): BackendModule[] { return MODULE_REGISTRY.filter(m => m.frontend.status === 'not-connected') } export function getPartialModules(): BackendModule[] { return MODULE_REGISTRY.filter(m => m.frontend.status === 'partial') } export function getModuleStats() { const total = MODULE_REGISTRY.length const connected = MODULE_REGISTRY.filter(m => m.frontend.status === 'connected').length const partial = MODULE_REGISTRY.filter(m => m.frontend.status === 'partial').length const notConnected = MODULE_REGISTRY.filter(m => m.frontend.status === 'not-connected').length const deprecated = MODULE_REGISTRY.filter(m => m.frontend.status === 'deprecated').length return { total, connected, partial, notConnected, deprecated, percentComplete: Math.round((connected / total) * 100) } } export function getCategoryStats(category: BackendModule['category']) { const modules = getModulesByCategory(category) const total = modules.length const connected = modules.filter(m => m.frontend.status === 'connected').length const partial = modules.filter(m => m.frontend.status === 'partial').length const notConnected = modules.filter(m => m.frontend.status === 'not-connected').length return { total, connected, partial, notConnected, percentComplete: total > 0 ? Math.round((connected / total) * 100) : 0 } }