From 652d3314028933df68024c6f3d9d116c8833e62c Mon Sep 17 00:00:00 2001 From: openhands Date: Thu, 20 Aug 2026 16:58:26 +0200 Subject: [PATCH] Add live furnidata reload without hotel reload and notImported status filter - Add /api/admin/import/furni?action=live-reconcile POST endpoint that reconciles FurnitureData.json with items_base without triggering RCON hotel reload - Add 'notImported' status filter in studio to show all non-imported furniture items - Useful for verifying imports and seeing what's missing after furniture import --- src/app/api/admin/import/furni/route.ts | 11 +++++++++++ src/components/admin/studio/studio-client.tsx | 2 ++ 2 files changed, 13 insertions(+) diff --git a/src/app/api/admin/import/furni/route.ts b/src/app/api/admin/import/furni/route.ts index 1d2b6596f8..711fa8660c 100644 --- a/src/app/api/admin/import/furni/route.ts +++ b/src/app/api/admin/import/furni/route.ts @@ -168,6 +168,17 @@ export const GET = withAdmin( return apiOk({ totalInDb, inCatalog, notInCatalog, missingNitro }); } + // Live furnidata reconcile (without hotel RCON reload) + if (action === "live-reconcile") { + const furniReconcile = await reconcileFurniDataWithItemsBase(); + return apiOk({ + furniDataFixedIds: furniReconcile.fixedIds, + furniDataFixedOfferIds: furniReconcile.fixedOfferIds, + furniDataMissing: furniReconcile.missing, + furniDataConflicts: furniReconcile.conflicts, + }); + } + // Missing nitro endpoint: returns only imported items missing .nitro files if (action === "missing-nitro") { const pageNum = parseInt( diff --git a/src/components/admin/studio/studio-client.tsx b/src/components/admin/studio/studio-client.tsx index 3ec7bc1c66..c3c5179d68 100644 --- a/src/components/admin/studio/studio-client.tsx +++ b/src/components/admin/studio/studio-client.tsx @@ -159,6 +159,8 @@ export function StudioClient({ result = result.filter((i) => i.alreadyImported && i.nitroExists); else if (statusFilter === "missingNitro") result = result.filter((i) => i.alreadyImported && !i.nitroExists); + else if (statusFilter === "notImported") + result = result.filter((i) => !i.alreadyImported); } const sorted = [...result]; if (sortBy === "name") sorted.sort((a, b) => a.name.localeCompare(b.name));