From c738f1234b097f955c828ff03eaa29c206d08550 Mon Sep 17 00:00:00 2001 From: Lars Date: Fri, 24 Apr 2026 17:15:17 +0200 Subject: [PATCH] fix: MediaWiki import - increase limit to 500 and add validation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Error: 422 Unprocessable Entity when limit > 100 Root cause: Backend enforced max=100, frontend allowed any value Backend fix: - Increased preview limit from 100 to 500 (consistent with execute) - import_wiki.py line 64: le=100 → le=500 Frontend fix: - Added Math.min/max validation to both limit inputs - Preview limit: max 500 with auto-clamp - Execute limit: max 500 with auto-clamp - Updated placeholder: 'Kein Limit (max 500)' Prevents 422 errors from invalid limit values --- backend/routers/import_wiki.py | 2 +- frontend/src/pages/MediaWikiImportPage.jsx | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/backend/routers/import_wiki.py b/backend/routers/import_wiki.py index 826e701..26aa531 100644 --- a/backend/routers/import_wiki.py +++ b/backend/routers/import_wiki.py @@ -61,7 +61,7 @@ def require_admin(session: dict = Depends(require_auth)) -> dict: async def preview_import( category: str = Query(default=CATEGORY_EXERCISES), import_type: str = Query(default="exercise"), - limit: int = Query(default=10, ge=1, le=100), + limit: int = Query(default=10, ge=1, le=500), session: dict = Depends(require_admin), ): """ diff --git a/frontend/src/pages/MediaWikiImportPage.jsx b/frontend/src/pages/MediaWikiImportPage.jsx index 2365ff6..77a10dc 100644 --- a/frontend/src/pages/MediaWikiImportPage.jsx +++ b/frontend/src/pages/MediaWikiImportPage.jsx @@ -202,9 +202,9 @@ export default function MediaWikiImportPage() { setPreviewLimit(parseInt(e.target.value) || 10)} + onChange={(e) => setPreviewLimit(Math.min(500, Math.max(1, parseInt(e.target.value) || 10)))} min="1" - max="100" + max="500" style={{ width: '100%', padding: '12px', @@ -368,9 +368,13 @@ export default function MediaWikiImportPage() { setExecuteLimit(e.target.value ? parseInt(e.target.value) : null)} - placeholder="Kein Limit" + onChange={(e) => { + const val = e.target.value ? parseInt(e.target.value) : null + setExecuteLimit(val ? Math.min(500, Math.max(1, val)) : null) + }} + placeholder="Kein Limit (max 500)" min="1" + max="500" style={{ width: '100%', padding: '12px',