diff --git a/backend/routers/import_wiki.py b/backend/routers/import_wiki.py index b648ed0..9d4475b 100644 --- a/backend/routers/import_wiki.py +++ b/backend/routers/import_wiki.py @@ -284,18 +284,37 @@ async def _run_import( page_title = member["title"] page_id = member.get("pageid") - # Duplikat-Check + # Duplikat-Check: Prüfe ob bereits importiert UND ob tatsächlich existiert if not reimport: with get_db() as conn: cur = get_cursor(conn) cur.execute( - "SELECT id FROM wiki_import_references WHERE wiki_page_title = %s AND content_type = %s", + "SELECT local_id FROM wiki_import_references WHERE wiki_page_title = %s AND content_type = %s", (page_title, import_type) ) - if cur.fetchone(): - stats["skipped"] += 1 - _update_log(log_id, **stats) - continue + ref = cur.fetchone() + if ref: + # Prüfe ob die Übung tatsächlich existiert + if import_type == "exercise": + cur.execute("SELECT id FROM exercises WHERE id = %s", (ref['local_id'],)) + elif import_type == "skill": + cur.execute("SELECT id FROM skills WHERE id = %s", (ref['local_id'],)) + else: + cur.execute("SELECT id FROM training_methods WHERE id = %s", (ref['local_id'],)) + + if cur.fetchone(): + # Referenz UND Übung existieren → Skip + stats["skipped"] += 1 + _update_log(log_id, **stats) + continue + else: + # Referenz existiert, aber Übung fehlt → Lösche fehlerhafte Referenz + logger.warning("Orphaned reference found for '%s', re-importing", page_title) + cur.execute( + "DELETE FROM wiki_import_references WHERE wiki_page_title = %s AND content_type = %s", + (page_title, import_type) + ) + conn.commit() # SMW Properties abrufen (mit Retry) try: