Großes Cleanup: Bugs fixen, Features fertigstellen, toten Code entfernen

Bugs behoben:
- handleEdit() async keyword hinzugefügt (E-Mail-Checkboxen funktionieren jetzt)
- parseUTC() Funktion definiert (Fortschritts-Timer nutzt Server-Startzeit)
- Status cancelling wird im Frontend korrekt angezeigt

Features fertiggestellt:
- Sidebar: Lagen nach Typ getrennt (adhoc/research) mit Zählern
- Quellen-Bearbeiten: Edit-Button pro Quelle, Formular vorausfüllen
- Lizenz-Info: Org-Name und Lizenzstatus im Header angezeigt

Toter Code entfernt:
- 5 verwaiste Dateien gelöscht (alte rss_parser, style.css, components.js, layout.js, setup_users)
- 6 ungenutzte Pydantic Models entfernt
- Ungenutzte Funktionen/Imports in auth.py, routers, agents, config
- Tote API-Methoden, Legacy-UI-Methoden, verwaiste WS-Handler
- Abgeschlossene DB-Migrationen aufgeräumt

Sonstiges:
- requirements.txt: passlib[bcrypt] durch bcrypt ersetzt
- Umlaute korrigiert (index.html)
- CSS: incident-type-label → incident-type-badge, .login-success hinzugefügt
- Schließen statt Schliessen im Feedback-Modal
Dieser Commit ist enthalten in:
claude-dev
2026-03-04 18:45:38 +01:00
Ursprung 2a155c084d
Commit 71296edb97
23 geänderte Dateien mit 269 neuen und 4768 gelöschten Zeilen

Datei anzeigen

@@ -4,11 +4,6 @@ from typing import Optional
from datetime import datetime
# Auth (Legacy)
class LoginRequest(BaseModel):
username: str
password: str
# Auth (Magic Link)
class MagicLinkRequest(BaseModel):
@@ -34,10 +29,6 @@ class TokenResponse(BaseModel):
username: str
class UserResponse(BaseModel):
id: int
username: str
class UserMeResponse(BaseModel):
id: int
@@ -97,32 +88,6 @@ class IncidentResponse(BaseModel):
source_count: int = 0
# Articles
class ArticleResponse(BaseModel):
id: int
incident_id: int
headline: str
headline_de: Optional[str]
source: str
source_url: Optional[str]
content_original: Optional[str]
content_de: Optional[str]
language: str
published_at: Optional[str]
collected_at: str
verification_status: str
# Fact Checks
class FactCheckResponse(BaseModel):
id: int
incident_id: int
claim: str
status: str
sources_count: int
evidence: Optional[str]
is_notification: bool
checked_at: str
# Sources (Quellenverwaltung)
@@ -191,18 +156,6 @@ class DomainActionRequest(BaseModel):
notes: Optional[str] = None
# Refresh-Log
class RefreshLogResponse(BaseModel):
id: int
started_at: str
completed_at: Optional[str] = None
articles_found: int = 0
status: str
trigger_type: str = "manual"
retry_count: int = 0
error_message: Optional[str] = None
duration_seconds: Optional[float] = None
# Notifications
class NotificationResponse(BaseModel):
@@ -239,7 +192,3 @@ class FeedbackRequest(BaseModel):
message: str = Field(min_length=10, max_length=5000)
class WSMessage(BaseModel):
type: str # new_article, status_update, notification, refresh_complete
incident_id: int
data: dict