fix: justify-content: center überall wiederhergestellt + Quellen-Duplikatprüfung
- CSS: 24x fälschliches flex-start zurück auf center (Login, Buttons, Modals, Badges, Map etc.) - Sources: Domain-Duplikatprüfung bei manuellem Hinzufügen (web_source 1x pro Domain, Domain aus URL extrahieren) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Dieser Commit ist enthalten in:
@@ -415,12 +415,14 @@ async def create_source(
|
||||
"""Neue Quelle hinzufuegen (org-spezifisch)."""
|
||||
tenant_id = current_user.get("tenant_id")
|
||||
|
||||
# Domain normalisieren (Subdomain-Aliase auflösen)
|
||||
# Domain normalisieren (Subdomain-Aliase auflösen, aus URL extrahieren)
|
||||
domain = data.domain
|
||||
if not domain and data.url:
|
||||
domain = _extract_domain(data.url)
|
||||
if domain:
|
||||
domain = _DOMAIN_ALIASES.get(domain.lower(), domain.lower())
|
||||
|
||||
# Duplikat-Prüfung: gleiche URL bereits vorhanden?
|
||||
# Duplikat-Prüfung 1: gleiche URL bereits vorhanden? (tenant-übergreifend)
|
||||
if data.url:
|
||||
cursor = await db.execute(
|
||||
"SELECT id, name FROM sources WHERE url = ? AND status = 'active'",
|
||||
@@ -433,6 +435,25 @@ async def create_source(
|
||||
detail=f"Feed-URL bereits vorhanden: {existing['name']} (ID {existing['id']})",
|
||||
)
|
||||
|
||||
# Duplikat-Prüfung 2: Domain bereits vorhanden? (tenant-übergreifend)
|
||||
if domain:
|
||||
cursor = await db.execute(
|
||||
"SELECT id, name, source_type FROM sources WHERE LOWER(domain) = ? AND status = 'active' AND (tenant_id IS NULL OR tenant_id = ?) LIMIT 1",
|
||||
(domain.lower(), tenant_id),
|
||||
)
|
||||
domain_existing = await cursor.fetchone()
|
||||
if domain_existing:
|
||||
if data.source_type == "web_source":
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_409_CONFLICT,
|
||||
detail=f"Web-Quelle für '{domain}' bereits vorhanden: {domain_existing['name']}",
|
||||
)
|
||||
if not data.url:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_409_CONFLICT,
|
||||
detail=f"Domain '{domain}' bereits als Quelle vorhanden: {domain_existing['name']}. Für einen neuen RSS-Feed bitte die Feed-URL angeben.",
|
||||
)
|
||||
|
||||
cursor = await db.execute(
|
||||
"""INSERT INTO sources (name, url, domain, source_type, category, status, notes, added_by, tenant_id)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)""",
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren