feat(catalog): add scripts/catalog-sync.ts CLI + interactive menu
CI / check (push) Successful in 32s
CI / tests-integration (push) Successful in 1m55s
CI / tests-unit (push) Successful in 2m1s
CI / tests-imaging-browsers (push) Successful in 2m7s
CI / tests-ui (push) Successful in 2m44s
CI / preflight (push) Skipped
CI / tests-quality (push) Successful in 1m46s
CI / deploy (push) Successful in 3m28s
CI / check (push) Successful in 32s
CI / tests-integration (push) Successful in 1m55s
CI / tests-unit (push) Successful in 2m1s
CI / tests-imaging-browsers (push) Successful in 2m7s
CI / tests-ui (push) Successful in 2m44s
CI / preflight (push) Skipped
CI / tests-quality (push) Successful in 1m46s
CI / deploy (push) Successful in 3m28s
Updating the catalog was only possible from the admin "Catalog audit" page, which streams `runCatalogAudit` over SSE and always compares against every enabled clone source. This adds the same engine to the terminal so it can be run by hand or from cron: - `scripts/catalog-sync.ts` — CLI driver around `runCatalogAudit`. Prints the live progress, the per-source "on the source but not in this hotel" counts and a summary block; generated catalog SQL is saved to `storage/catalog-sync/*.sql` (gitignored). Supports `--list-sources`, `--sources=<a,b>`, `--icons`, `--nitros`, `--furnidata`, `--structure`, `--check-ids`, `--sql`, `--apply-sql`, `--organize-sql`, `--all`, `--json` and `--fail-on-errors`. - `scripts/catalog-sync.sh` — interactive menu (`pnpm catalog:sync`). Lists the configured sources (so the menu always matches `clone_sources`), lets Habbo (COM) be taken with Enter, and offers audit-only through full repair + applying the catalog SQL, each with a distinct confirmation. With no arguments it needs a terminal; with any flag it passes straight through to the CLI. - `runCatalogAudit` gains `sourceIds` to restrict which sites are compared; omitting it keeps the previous "compare against everything enabled" behaviour. An audit writes nothing, and `--apply-sql` is the only flag that changes the catalog. Verified against the live DB: 16370 items_base rows, 16479 catalog items, 2871 Habbo (COM) entries missing from this hotel.
This commit is contained in:
1 parent
61107848f8
commit
4b575d3a1d
7 files changed
+739
-1
No files matched your search
@@ -141,6 +141,11 @@ export interface CatalogAuditOptions {
|
||||
repairFurniData?: boolean;
|
||||
repairStructure?: boolean;
|
||||
checkFurniDataIds?: boolean;
|
||||
/**
|
||||
* Restrict the clone-source comparison to these sources (by id or name).
|
||||
* Empty/omitted keeps every enabled source, which is the default.
|
||||
*/
|
||||
sourceIds?: string[];
|
||||
}
|
||||
|
||||
export async function runCatalogAudit(
|
||||
@@ -838,7 +843,13 @@ export async function runCatalogAudit(
|
||||
|
||||
onEvent?.({ type: "progress", message: "Comparing with clone sources…" });
|
||||
|
||||
const sources = await listSources();
|
||||
const allSources = await listSources();
|
||||
// An explicit selection compares against just those sites; leaving it empty
|
||||
// keeps the historical "compare against everything enabled" behaviour.
|
||||
const wantedIds = new Set(options?.sourceIds ?? []);
|
||||
const sources = wantedIds.size
|
||||
? allSources.filter((s) => wantedIds.has(s.id) || wantedIds.has(s.name))
|
||||
: allSources;
|
||||
const sourceResults = await Promise.all(
|
||||
sources
|
||||
.filter((s) => s.furnidataUrl)
|
||||
|
||||
Reference in new issue
Block a user