feat: catalog audit can repair orphaned refs and duplicate classnames

- add repairOrphanedCatalog: remove catalog_items rows whose item_ids only
  reference missing items_base entries, strip orphaned ids from mixed rows
- add repairDuplicateClassnames: merge items_base duplicates into one
  canonical row per classname, remap references, delete duplicate rows
- add 'repair structural issues' checkbox + result display in audit UI
This commit is contained in:
openhands committed 2026-08-03 18:08:45 +02:00
1 parent bee55e1fd4
commit 6fc14b9b84
4 files changed
+384 -1

No files matched your search

File diff suppressed because it is too large. Load diff
+4
View File
@@ -16,6 +16,7 @@ export const POST = withAdmin(
let sql = false; let sql = false;
let applySql = false; let applySql = false;
let repairFurniData = false; let repairFurniData = false;
let repairStructure = false;
try { try {
const body = (await request.json().catch(() => ({}))) as { const body = (await request.json().catch(() => ({}))) as {
repair?: unknown; repair?: unknown;
@@ -23,12 +24,14 @@ export const POST = withAdmin(
sql?: unknown; sql?: unknown;
applySql?: unknown; applySql?: unknown;
repairFurniData?: unknown; repairFurniData?: unknown;
repairStructure?: unknown;
}; };
repair = body.repair === true; repair = body.repair === true;
repairNitros = body.repairNitros === true; repairNitros = body.repairNitros === true;
sql = body.sql === true; sql = body.sql === true;
applySql = body.applySql === true; applySql = body.applySql === true;
repairFurniData = body.repairFurniData === true; repairFurniData = body.repairFurniData === true;
repairStructure = body.repairStructure === true;
} catch { } catch {
/* no body */ /* no body */
} }
@@ -50,6 +53,7 @@ export const POST = withAdmin(
sql, sql,
applySql, applySql,
repairFurniData, repairFurniData,
repairStructure,
}); });
} catch (err) { } catch (err) {
send({ send({
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff