ui all languages transferred

This commit is contained in:
ValueOn AG 2026-04-09 00:11:36 +02:00
parent 8b33a86274
commit ba8356fc0e

View file

@ -591,6 +591,33 @@ async def create_language_set(
return {"status": "accepted", "code": code} 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: 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.""" """Synchronise a language set (incl. de) against the xx base set via AI."""
if code == "xx": if code == "xx":
@ -703,6 +730,19 @@ async def update_all_language_sets(
return {"xxSync": xxSync, "updated": results} 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}") @router.put("/sets/{code}")
async def update_language_set( async def update_language_set(
code: str, code: str,