Reconcile offer_id after every import
After each single or batch import, walk all catalog items under the Imported Furniture tree and set offer_id to the furnidata sprite id, repairing any stale values (e.g. legacy -1 rows). Reports how many rows were fixed in the API response.
This commit is contained in:
1 parent
305a0c42ff
commit
c95ad4a37f
2 files changed
+35
-3
No files matched your search
@@ -284,6 +284,25 @@ export function resetCatalogPageCache(): void {
|
||||
categoryCacheTimestamp = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Walk every catalog item under the "Imported Furniture" tree and make its
|
||||
* offer_id match the furnidata sprite id (item_ids). Fixes any stale values
|
||||
* (e.g. legacy -1 rows) after an import.
|
||||
*/
|
||||
export async function reconcileImportedOfferIds(): Promise<{
|
||||
fixed: number;
|
||||
}> {
|
||||
const parentId = await getOrCreateImportedParentPage();
|
||||
const [result] = (await db.execute(sql`
|
||||
UPDATE catalog_items ci
|
||||
JOIN catalog_pages cp ON cp.id = ci.page_id
|
||||
SET ci.offer_id = CAST(ci.item_ids AS UNSIGNED)
|
||||
WHERE cp.parent_id = ${parentId}
|
||||
AND ci.offer_id <> CAST(ci.item_ids AS UNSIGNED)
|
||||
`)) as unknown as [Record<string, unknown>, unknown];
|
||||
return { fixed: Number(result.affectedRows ?? 0) };
|
||||
}
|
||||
|
||||
/**
|
||||
* Allocate the next `catalog_items.id` and run the INSERT through a
|
||||
* process-level async mutex so concurrent imports in the same Node process
|
||||
|
||||
Reference in new issue
Block a user