fix: Vorbereitung-Module auf 100% — Feld-Fixes, Backend-Persistenz, Endpoints

- ScopeExportTab: 11 Feldnamen-Mismatches gegen ScopeDecision Interface korrigiert
  (level→determinedLevel, riskScore→risk_score, hardTriggers→triggeredHardTriggers,
  depthDescription→depth, effortEstimate→estimatedEffort, isMandatory→required,
  triggeredByHardTrigger→triggeredBy, effortDays→estimatedEffort)
- Company Profile: GET vom Backend beim Mount, snake_case→camelCase, SDK State Fallback
- Modules: Aktivierung/Deaktivierung ans Backend schreiben (activate/deactivate Endpoints)
- Obligations: Explizites Fehler-Banner statt stiller Fallback bei Backend-Fehler
- Source Policy: BlockedContentDB Model + GET /api/v1/admin/blocked-content Endpoint
- Import: Offline-Modus Label fuer Backend-Fallback

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Benjamin Admin
2026-03-02 12:02:40 +01:00
parent 80a988dc58
commit f7a0b11e41
10 changed files with 278 additions and 39 deletions

View File

@@ -301,7 +301,7 @@ export default function ModulesPage() {
.filter(m => state.modules.some(sm => sm.id === m.id))
.reduce((sum, m) => sum + m.controlsCount, 0)
const handleActivateModule = (module: DisplayModule) => {
const handleActivateModule = async (module: DisplayModule) => {
const serviceModule: ServiceModule = {
id: module.id,
name: module.name,
@@ -312,11 +312,27 @@ export default function ModulesPage() {
hasAIComponents: module.hasAIComponents,
}
dispatch({ type: 'ADD_MODULE', payload: serviceModule })
try {
await fetch(`/api/sdk/v1/modules/${encodeURIComponent(module.id)}/activate`, {
method: 'POST',
})
} catch {
console.warn('Could not persist module activation to backend')
}
}
const handleDeactivateModule = (moduleId: string) => {
const handleDeactivateModule = async (moduleId: string) => {
const updatedModules = state.modules.filter(m => m.id !== moduleId)
dispatch({ type: 'SET_STATE', payload: { modules: updatedModules } })
try {
await fetch(`/api/sdk/v1/modules/${encodeURIComponent(moduleId)}/deactivate`, {
method: 'POST',
})
} catch {
console.warn('Could not persist module deactivation to backend')
}
}
const stepInfo = STEP_EXPLANATIONS['modules']