Files
amayo/scripts/cleanInvalidMobs.ts

55 lines
1.4 KiB
TypeScript
Raw Normal View History

import { prisma } from "../src/core/database/prisma";
import { BaseMobDefinitionSchema } from "../src/game/mobs/mobData";
async function run() {
if (!process.env.XATA_DB) {
console.error("XATA_DB not set — aborting");
process.exit(1);
}
console.log("Scanning mobs table for invalid definitions...");
const rows: any[] = await (prisma as any).mob.findMany();
const invalid: any[] = [];
for (const r of rows) {
const cfg =
r.metadata ??
r.stats ??
r.drops ??
r.config ??
r.definition ??
r.data ??
null;
try {
BaseMobDefinitionSchema.parse(cfg as any);
} catch (e) {
invalid.push({ id: r.id, error: (e as any)?.errors ?? e, row: r });
}
}
if (invalid.length === 0) {
console.log("No invalid mob definitions found.");
process.exit(0);
}
console.log(
`Found ${invalid.length} invalid rows. Backing up and deleting...`
);
// backup
console.log("Backup file: invalid_mobs_backup.json");
require("fs").writeFileSync(
"invalid_mobs_backup.json",
JSON.stringify(invalid, null, 2)
);
for (const it of invalid) {
try {
await (prisma as any).mob.delete({ where: { id: it.id } });
console.log("Deleted invalid mob id=", it.id);
} catch (e) {
console.warn("Failed to delete id=", it.id, e);
}
}
console.log("Cleanup complete. Review invalid_mobs_backup.json");
}
run().catch((e) => {
console.error(e);
process.exit(1);
});