feat: 7 Analyse-Module auf 100% — Backend-Endpoints, DB-Model, Frontend-Persistenz
Alle 7 Analyse-Module (Requirements → Report) von ~80% auf 100% gebracht: - Modul 1 (Requirements): POST/DELETE Endpoints + Frontend-Anbindung + Rollback - Modul 2 (Controls): Evidence-Linking UI mit Validity-Badge - Modul 3 (Evidence): Pagination (Frontend + Backend) - Modul 4 (Risk Matrix): Mitigation-UI, Residual Risk, Status-Workflow - Modul 5 (AI Act): AISystemDB Model, 6 CRUD-Endpoints, Backend-Persistenz - Modul 6 (Audit Checklist): PDF-Download + Session-History - Modul 7 (Audit Report): Detail-Seite mit Checklist Sign-Off + Navigation Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -324,6 +324,59 @@ async def list_requirements_paginated(
|
||||
)
|
||||
|
||||
|
||||
@router.post("/requirements", response_model=RequirementResponse)
|
||||
async def create_requirement(
|
||||
data: RequirementCreate,
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
"""Create a new requirement."""
|
||||
# Verify regulation exists
|
||||
reg_repo = RegulationRepository(db)
|
||||
regulation = reg_repo.get_by_id(data.regulation_id)
|
||||
if not regulation:
|
||||
raise HTTPException(status_code=404, detail=f"Regulation {data.regulation_id} not found")
|
||||
|
||||
req_repo = RequirementRepository(db)
|
||||
requirement = req_repo.create(
|
||||
regulation_id=data.regulation_id,
|
||||
article=data.article,
|
||||
title=data.title,
|
||||
paragraph=data.paragraph,
|
||||
description=data.description,
|
||||
requirement_text=data.requirement_text,
|
||||
breakpilot_interpretation=data.breakpilot_interpretation,
|
||||
is_applicable=data.is_applicable,
|
||||
priority=data.priority,
|
||||
)
|
||||
|
||||
return RequirementResponse(
|
||||
id=requirement.id,
|
||||
regulation_id=requirement.regulation_id,
|
||||
regulation_code=regulation.code,
|
||||
article=requirement.article,
|
||||
paragraph=requirement.paragraph,
|
||||
title=requirement.title,
|
||||
description=requirement.description,
|
||||
requirement_text=requirement.requirement_text,
|
||||
breakpilot_interpretation=requirement.breakpilot_interpretation,
|
||||
is_applicable=requirement.is_applicable,
|
||||
applicability_reason=requirement.applicability_reason,
|
||||
priority=requirement.priority,
|
||||
created_at=requirement.created_at,
|
||||
updated_at=requirement.updated_at,
|
||||
)
|
||||
|
||||
|
||||
@router.delete("/requirements/{requirement_id}")
|
||||
async def delete_requirement(requirement_id: str, db: Session = Depends(get_db)):
|
||||
"""Delete a requirement by ID."""
|
||||
req_repo = RequirementRepository(db)
|
||||
deleted = req_repo.delete(requirement_id)
|
||||
if not deleted:
|
||||
raise HTTPException(status_code=404, detail=f"Requirement {requirement_id} not found")
|
||||
return {"success": True, "message": "Requirement deleted"}
|
||||
|
||||
|
||||
@router.put("/requirements/{requirement_id}")
|
||||
async def update_requirement(requirement_id: str, updates: dict, db: Session = Depends(get_db)):
|
||||
"""Update a requirement with implementation/audit details."""
|
||||
@@ -818,7 +871,7 @@ async def init_tables(db: Session = Depends(get_db)):
|
||||
from classroom_engine.database import engine
|
||||
from ..db.models import (
|
||||
RegulationDB, RequirementDB, ControlDB, ControlMappingDB,
|
||||
EvidenceDB, RiskDB, AuditExportDB
|
||||
EvidenceDB, RiskDB, AuditExportDB, AISystemDB
|
||||
)
|
||||
|
||||
try:
|
||||
@@ -830,6 +883,7 @@ async def init_tables(db: Session = Depends(get_db)):
|
||||
EvidenceDB.__table__.create(engine, checkfirst=True)
|
||||
RiskDB.__table__.create(engine, checkfirst=True)
|
||||
AuditExportDB.__table__.create(engine, checkfirst=True)
|
||||
AISystemDB.__table__.create(engine, checkfirst=True)
|
||||
|
||||
return {"success": True, "message": "Tables created successfully"}
|
||||
except Exception as e:
|
||||
|
||||
Reference in New Issue
Block a user