diff --git a/src/routers/sources.py b/src/routers/sources.py index 3974de4..276e953 100644 --- a/src/routers/sources.py +++ b/src/routers/sources.py @@ -24,7 +24,7 @@ logger = logging.getLogger("verwaltung.sources") router = APIRouter(prefix="/api/sources", tags=["sources"]) -SOURCE_UPDATE_COLUMNS = {"name", "url", "domain", "source_type", "category", "status", "notes"} +SOURCE_UPDATE_COLUMNS = {"name", "url", "domain", "source_type", "category", "status", "notes", "language", "bias"} @router.get("/meta") @@ -46,6 +46,8 @@ class GlobalSourceCreate(BaseModel): category: str = Field(default="sonstige") status: str = Field(default="active", pattern="^(active|inactive)$") notes: Optional[str] = None + language: Optional[str] = Field(default=None, max_length=100) + bias: Optional[str] = Field(default=None, max_length=500) class GlobalSourceUpdate(BaseModel): @@ -56,6 +58,8 @@ class GlobalSourceUpdate(BaseModel): category: Optional[str] = None status: Optional[str] = Field(default=None, pattern="^(active|inactive)$") notes: Optional[str] = None + language: Optional[str] = Field(default=None, max_length=100) + bias: Optional[str] = Field(default=None, max_length=500) @router.get("/global") @@ -139,9 +143,10 @@ async def create_global_source( ) cursor = await db.execute( - """INSERT INTO sources (name, url, domain, source_type, category, status, notes, added_by, tenant_id) - VALUES (?, ?, ?, ?, ?, ?, ?, 'system', NULL)""", - (data.name, data.url, data.domain, data.source_type, data.category, data.status, data.notes), + """INSERT INTO sources (name, url, domain, source_type, category, status, notes, language, bias, added_by, tenant_id) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 'system', NULL)""", + (data.name, data.url, data.domain, data.source_type, data.category, data.status, data.notes, + data.language, data.bias), ) src_id = cursor.lastrowid await db.commit() @@ -223,6 +228,24 @@ async def delete_global_source( + + + +@router.get("/global/languages") +async def get_global_languages( + admin: dict = Depends(get_current_admin), + db: aiosqlite.Connection = Depends(db_dependency), +): + """Distinct language-Werte aus Grundquellen - für Frontend-Filter-Dropdown.""" + cur = await db.execute(""" + SELECT DISTINCT language + FROM sources + WHERE tenant_id IS NULL AND language IS NOT NULL AND language != '' + ORDER BY language + """) + return [r["language"] for r in await cur.fetchall()] + + @router.get("/global/stats") async def get_global_stats( admin: dict = Depends(get_current_admin), diff --git a/src/static/dashboard.html b/src/static/dashboard.html index cdbd73a..08893ca 100644 --- a/src/static/dashboard.html +++ b/src/static/dashboard.html @@ -313,6 +313,9 @@ + @@ -330,6 +333,8 @@ Artikel Aktivität Sperren + Sprache + Bias Letzter Treffer Health Status @@ -356,6 +361,9 @@ +