Files
breakpilot-lehrer/admin-lehrer/app/(admin)/backlog/page.tsx
Benjamin Admin b681ddb131 [split-required] Split 58 monoliths across Python, Go, TypeScript (Phases 1-3)
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>
2026-04-24 17:28:57 +02:00

102 lines
2.8 KiB
TypeScript

'use client'
/**
* Production Readiness Backlog
*
* Comprehensive checklist of items needed before going live with BreakPilot
* Includes CI/CD, Security, RBAC, Data Protection, and Release Workflows
*
* Migrated from website/app/admin/backlog/page.tsx
* Updated: 2026-02-03
*/
import { PagePurpose } from '@/components/common/PagePurpose'
import { metaModules } from '@/lib/navigation'
import { categories } from './data'
import { useBacklog } from './useBacklog'
import { OverallProgress } from './_components/OverallProgress'
import { CategoryCards } from './_components/CategoryCards'
import { FilterBar } from './_components/FilterBar'
import { BacklogItemCard } from './_components/BacklogItemCard'
import { InfoBox } from './_components/InfoBox'
export default function BacklogPage() {
const module = metaModules.find((m) => m.id === 'backlog')
const {
filteredItems,
selectedCategory,
setSelectedCategory,
selectedPriority,
setSelectedPriority,
expandedItems,
searchQuery,
setSearchQuery,
toggleExpand,
updateItemStatus,
toggleSubtask,
progress,
getCategoryProgress,
resetToDefaults,
clearFilters,
hasActiveFilters,
} = useBacklog()
return (
<div className="space-y-6">
{module && (
<PagePurpose
title={module.name}
purpose={module.purpose}
audience={module.audience}
collapsible={true}
defaultCollapsed={true}
/>
)}
<OverallProgress progress={progress} onReset={resetToDefaults} />
<CategoryCards
categories={categories}
selectedCategory={selectedCategory}
onSelectCategory={setSelectedCategory}
getCategoryProgress={getCategoryProgress}
/>
<FilterBar
searchQuery={searchQuery}
onSearchChange={setSearchQuery}
selectedPriority={selectedPriority}
onPriorityChange={setSelectedPriority}
hasActiveFilters={hasActiveFilters}
onClearFilters={clearFilters}
/>
{/* Backlog Items */}
<div className="space-y-3">
{filteredItems.map((item) => {
const category = categories.find((c) => c.id === item.category)
return (
<BacklogItemCard
key={item.id}
item={item}
category={category}
isExpanded={expandedItems.has(item.id)}
onToggleExpand={toggleExpand}
onUpdateStatus={updateItemStatus}
onToggleSubtask={toggleSubtask}
/>
)
})}
</div>
{filteredItems.length === 0 && (
<div className="text-center py-12 text-slate-500">
Keine Aufgaben gefunden. Versuche einen anderen Filter.
</div>
)}
<InfoBox />
</div>
)
}