Parte de #2 (modo construcción). Depende de la capa de persistencia.
Por qué
Editar el mundo en vivo es destructivo y va a haber accidentes. Sin poder deshacer, un error de una persona con permisos borra trabajo de horas y no hay forma de saber quién lo hizo.
Lo que ya existe
La tabla game_data_revisions (kind, entity_id, action, checksum) ya registra cambios de game data. Sirve como base, pero para deshacer hace falta guardar el estado anterior, no sólo un checksum.
Alcance
- Log de auditoría consultable: quién cambió qué mapa, cuándo y qué cambió exactamente.
- Deshacer la última operación sobre un mapa.
- Rehacer.
- Volver un mapa a una revisión anterior (rollback).
- Diff entre dos revisiones de un mapa.
Decisión de diseño a resolver
Guardar el estado completo del mapa por revisión es simple pero pesado: 10.000 tiles por mapa, y una sesión de edición genera muchas revisiones.
Guardar sólo el delta de cada operación es mucho más liviano y hace el undo natural, pero reconstruir un estado arbitrario obliga a reproducir la cadena.
Sugerencia: deltas, con un snapshot completo cada N revisiones para acotar el costo de reconstrucción.
Criterios de aceptación
Archivos relevantes
api/src/repositories/ (todos los repos que ya escriben en game_data_revisions)
api/schema.sql
Parte de #2 (modo construcción). Depende de la capa de persistencia.
Por qué
Editar el mundo en vivo es destructivo y va a haber accidentes. Sin poder deshacer, un error de una persona con permisos borra trabajo de horas y no hay forma de saber quién lo hizo.
Lo que ya existe
La tabla
game_data_revisions(kind,entity_id,action,checksum) ya registra cambios de game data. Sirve como base, pero para deshacer hace falta guardar el estado anterior, no sólo un checksum.Alcance
Decisión de diseño a resolver
Guardar el estado completo del mapa por revisión es simple pero pesado: 10.000 tiles por mapa, y una sesión de edición genera muchas revisiones.
Guardar sólo el delta de cada operación es mucho más liviano y hace el undo natural, pero reconstruir un estado arbitrario obliga a reproducir la cadena.
Sugerencia: deltas, con un snapshot completo cada N revisiones para acotar el costo de reconstrucción.
Criterios de aceptación
Archivos relevantes
api/src/repositories/(todos los repos que ya escriben engame_data_revisions)api/schema.sql