73 lines
2.1 KiB
TypeScript
73 lines
2.1 KiB
TypeScript
|
|
import fs from "fs";
|
||
|
|
import { prisma } from "../src/core/database/prisma";
|
||
|
|
|
||
|
|
async function run() {
|
||
|
|
if (!process.env.XATA_DB) {
|
||
|
|
console.error("XATA_DB not set — aborting");
|
||
|
|
process.exit(1);
|
||
|
|
}
|
||
|
|
|
||
|
|
if (!fs.existsSync("invalid_mobs_backup.json")) {
|
||
|
|
console.error("invalid_mobs_backup.json not found — run cleanup first");
|
||
|
|
process.exit(1);
|
||
|
|
}
|
||
|
|
|
||
|
|
const bak = JSON.parse(fs.readFileSync("invalid_mobs_backup.json", "utf8"));
|
||
|
|
const ids: string[] = bak.map((b: any) => b.id).filter(Boolean);
|
||
|
|
if (ids.length === 0) {
|
||
|
|
console.log("No ids found in invalid_mobs_backup.json");
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
console.log(
|
||
|
|
"Backing up ScheduledMobAttack rows that reference these mob ids..."
|
||
|
|
);
|
||
|
|
try {
|
||
|
|
const deps = await (prisma as any).scheduledMobAttack.findMany({
|
||
|
|
where: { mobId: { in: ids } },
|
||
|
|
});
|
||
|
|
fs.writeFileSync(
|
||
|
|
"scheduled_mob_attack_backup.json",
|
||
|
|
JSON.stringify(deps, null, 2)
|
||
|
|
);
|
||
|
|
console.log(
|
||
|
|
`Backed up ${deps.length} ScheduledMobAttack rows to scheduled_mob_attack_backup.json`
|
||
|
|
);
|
||
|
|
|
||
|
|
if (deps.length > 0) {
|
||
|
|
console.log(
|
||
|
|
"Deleting ScheduledMobAttack rows referencing invalid mobs..."
|
||
|
|
);
|
||
|
|
const delRes = await (prisma as any).scheduledMobAttack.deleteMany({
|
||
|
|
where: { mobId: { in: ids } },
|
||
|
|
});
|
||
|
|
console.log(`Deleted ${delRes.count || delRes} ScheduledMobAttack rows`);
|
||
|
|
} else {
|
||
|
|
console.log("No dependent ScheduledMobAttack rows to delete.");
|
||
|
|
}
|
||
|
|
} catch (e: any) {
|
||
|
|
console.error("Failed to backup/delete dependent rows:", e?.message ?? e);
|
||
|
|
process.exit(1);
|
||
|
|
}
|
||
|
|
|
||
|
|
console.log("Deleting invalid mob rows from Mob table...");
|
||
|
|
try {
|
||
|
|
const delMobs = await (prisma as any).mob.deleteMany({
|
||
|
|
where: { id: { in: ids } },
|
||
|
|
});
|
||
|
|
console.log(`Deleted ${delMobs.count || delMobs} mob rows`);
|
||
|
|
} catch (e: any) {
|
||
|
|
console.error("Failed to delete mob rows:", e?.message ?? e);
|
||
|
|
process.exit(1);
|
||
|
|
}
|
||
|
|
|
||
|
|
console.log(
|
||
|
|
"Done. Backups: invalid_mobs_backup.json, scheduled_mob_attack_backup.json"
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
|
run().catch((e) => {
|
||
|
|
console.error(e);
|
||
|
|
process.exit(1);
|
||
|
|
});
|