diff --git a/modules/routes/routeI18n.py b/modules/routes/routeI18n.py index 77cf7282..5b4f600b 100644 --- a/modules/routes/routeI18n.py +++ b/modules/routes/routeI18n.py @@ -591,6 +591,33 @@ async def create_language_set( return {"status": "accepted", "code": code} +def _compute_language_sync_diff(db, code: str) -> dict: + """Return key sync metrics before AI translate (no DB writes).""" + if code == "xx": + raise HTTPException(status_code=400, detail="Das xx-Set wird separat synchronisiert.") + rows = db.getRecordset(UiLanguageSet, recordFilter={"id": code}) + if not rows: + raise HTTPException(status_code=404, detail="Sprachset nicht gefunden") + xx_entries = _loadMasterXxEntries(db) + if not xx_entries: + raise HTTPException(status_code=503, detail="Basisset (xx) nicht vorhanden.") + row = dict(rows[0]) + cur_entries = _rowEntries(row) + cur_by_key = {e["key"]: e for e in cur_entries} + xx_by_key = {e["key"]: e for e in xx_entries} + master_keys = set(xx_by_key.keys()) + current_keys = set(cur_by_key.keys()) + added_count = len(master_keys - current_keys) + removed_count = len(current_keys - master_keys) + return { + "code": code, + "addedCount": added_count, + "removedCount": removed_count, + "masterEntryCount": len(master_keys), + "currentEntryCount": len(current_keys), + } + + async def _syncLanguageWithXx(db, code: str, userId: Optional[str], adminUser: Optional[User] = None) -> dict: """Synchronise a language set (incl. de) against the xx base set via AI.""" if code == "xx": @@ -703,6 +730,19 @@ async def update_all_language_sets( return {"xxSync": xxSync, "updated": results} +@router.get("/sets/{code}/sync-diff") +async def get_language_sync_diff( + code: str, + adminUser: User = Depends(requireSysAdminRole), +): + """How many keys would be added/removed vs xx before running a full sync (SysAdmin).""" + c = code.strip().lower() + if c in ("update-all", "sync-xx", "sync-de"): + raise HTTPException(status_code=400, detail="Ungültiger Sprachcode.") + db = getMgmtInterface(adminUser, mandateId=None).db + return _compute_language_sync_diff(db, c) + + @router.put("/sets/{code}") async def update_language_set( code: str,