- Implemented `findMobDependencies.ts` to identify foreign key constraints referencing the Mob table and log dependent rows. - Created `fullServerSetup.ts` for idempotent server setup, including economy items, item recipes, game areas, mobs, and optional demo mob attacks. - Developed `removeInvalidMobsWithDeps.ts` to delete invalid mobs and their dependencies, backing up affected scheduled mob attacks. - Added unit tests in `testMobUnit.ts` and `mob.test.ts` for mob functionality, including stats computation and instance retrieval. - Introduced reward modification tests in `testRewardMods.ts` and `rewardMods.unit.ts` to validate drop selection and coin multiplier behavior. - Enhanced command handling for mob deletion in `mobDelete.ts` and setup examples in `setup.ts`, ensuring proper permissions and feedback. - Created utility functions in `testHelpers.ts` for deterministic drop selection from mob definitions.
2.4 KiB
Resumen de la limpieza de mobs inválidos
Qué hice
- Detecté mob definitions inválidas en la tabla
Mobusandoscripts/cleanInvalidMobs.ts. - Guardé un respaldo completo de las filas inválidas en
invalid_mobs_backup.jsonen la raíz del repo. - Busqué dependencias en tablas que referencian
Mobconscripts/findMobDependencies.ts. - Guardé un respaldo de las filas dependientes en
scheduled_mob_attack_backup.json. - Eliminé las filas dependientes en
ScheduledMobAttacky luego eliminé las filas inválidas deMobconscripts/removeInvalidMobsWithDeps.ts.
Backups
invalid_mobs_backup.json— contiene objetos conid,row(registro original) yerror(ZodError).scheduled_mob_attack_backup.json— contiene filas deScheduledMobAttackque apuntaban a los mobs inválidos.
Comandos usados
-
Detectar mobs inválidos (no destructivo):
npx tsx scripts/testMobData.ts
-
Generar backup + eliminar mobs inválidos (no recomendado sin revisar):
XATA_DB=... npx tsx scripts/cleanInvalidMobs.ts
-
Buscar dependencias (muestra FK y filas dependientes):
XATA_DB=... npx tsx scripts/findMobDependencies.ts
-
Backups + borrado de dependencias y mobs (ya ejecutado):
XATA_DB=... npx tsx scripts/removeInvalidMobsWithDeps.ts
Restauración
-
Si deseas restaurar datos desde los backups, hay dos estrategias:
-
Restauración completa (reinsertar mobs, luego scheduled attacks): requiere restaurar
Mobantes deScheduledMobAttack. -
Restauración parcial (solo scheduled attacks): solo posible si los
Mobexisten o se restauran con anterioridad.
-
Pistas para restaurar (ejemplo rápido)
-
Para reinserción manual (SQL generada): examina
invalid_mobs_backup.json, reconstruye los objetosmetadatay ejecuta INSERTs en la tablaMobrespetando columnas. -
Para reinserción de
ScheduledMobAttack: usascheduled_mob_attack_backup.jsone inserta filas; asegúrate de quemobIdapunte a unMobexistente.
Siguientes pasos recomendados
- Revisar backups antes de cualquier restauración.
- Añadir validación previa a la UI que crea mobs para evitar shapes inválidos (ya existe zod pero su uso puede ampliarse).
- Añadir tests DB-backed en staging para evitar que filas inválidas lleguen a producción.
Contacto
- Si quieres, puedo generar un script de restauración
scripts/restoreFromBackup.tsque hace esto de forma idempotente y segura. Pídelo y lo creo.