Phase 1 — Python (klausur-service): 5 monoliths → 36 files - dsfa_corpus_ingestion.py (1,828 LOC → 5 files) - cv_ocr_engines.py (2,102 LOC → 7 files) - cv_layout.py (3,653 LOC → 10 files) - vocab_worksheet_api.py (2,783 LOC → 8 files) - grid_build_core.py (1,958 LOC → 6 files) Phase 2 — Go (edu-search-service, school-service): 8 monoliths → 19 files - staff_crawler.go (1,402 → 4), policy/store.go (1,168 → 3) - policy_handlers.go (700 → 2), repository.go (684 → 2) - search.go (592 → 2), ai_extraction_handlers.go (554 → 2) - seed_data.go (591 → 2), grade_service.go (646 → 2) Phase 3 — TypeScript (admin-lehrer): 45 monoliths → 220+ files - sdk/types.ts (2,108 → 16 domain files) - ai/rag/page.tsx (2,686 → 14 files) - 22 page.tsx files split into _components/ + _hooks/ - 11 component files split into sub-components - 10 SDK data catalogs added to loc-exceptions - Deleted dead backup index_original.ts (4,899 LOC) All original public APIs preserved via re-export facades. Zero new errors: Python imports verified, Go builds clean, TypeScript tsc --noEmit shows only pre-existing errors. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
94 lines
3.0 KiB
TypeScript
94 lines
3.0 KiB
TypeScript
/**
|
|
* 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
|
|
}
|
|
}
|