"use server"; import { requirePermission } from "@/lib/admin/guard"; import { PERMS } from "@/lib/permissions"; import { type ActionResult, actionOk, handleActionError, } from "@/lib/safe-action-shared"; import { withCatalogExport } from "@/lib/services/catalog-git-queue"; import type { AlignResult, DedupResult, FixOfferResult, FixSpriteResult, FurniHealth, ReconcileResult, } from "@/lib/services/furni-maintenance"; import * as maintenance from "@/lib/services/furni-maintenance"; async function guard() { await requirePermission(PERMS.CATALOG_EDIT); } export async function getFurniHealthAction(): Promise< ActionResult<{ health: FurniHealth }> > { try { await guard(); const health = await maintenance.getFurniHealth(); return actionOk({ health }); } catch (e) { return handleActionError(e); } } export async function fixSpriteIdsAction(): Promise< ActionResult > { try { await guard(); return await withCatalogExport(async () => { return actionOk(await maintenance.fixSpriteIds()); }); } catch (e) { return handleActionError(e); } } export async function fixCatalogOffersAction(): Promise< ActionResult > { try { await guard(); return await withCatalogExport(async () => { return actionOk(await maintenance.fixCatalogOffers()); }); } catch (e) { return handleActionError(e); } } export async function reconcileIdsAction(): Promise< ActionResult > { try { await guard(); return await withCatalogExport(async () => { return actionOk(await maintenance.reconcileIds()); }); } catch (e) { return handleActionError(e); } } export async function removeDuplicateItemsBaseAction(): Promise< ActionResult > { try { await guard(); return await withCatalogExport(async () => { return actionOk(await maintenance.removeDuplicates()); }); } catch (e) { return handleActionError(e); } } export async function previewAlignIdsAction(): Promise< ActionResult > { try { await guard(); return actionOk(await maintenance.forceItemsBaseIdsToFurnidata(false)); } catch (e) { return handleActionError(e); } } export async function applyAlignIdsAction(): Promise< ActionResult > { try { await guard(); return await withCatalogExport(async () => { return actionOk(await maintenance.forceItemsBaseIdsToFurnidata(true)); }); } catch (e) { return handleActionError(e); } } export async function fixEverythingAction(input?: { dedupePages?: boolean; }): Promise> { try { await guard(); return await withCatalogExport(async () => { return actionOk(await maintenance.fixEverything(input ?? {})); }); } catch (e) { return handleActionError(e); } }