Skip to content

Etapa 3: log de auditoria, deshacer y rollback de mapas #12

Description

@leocagli

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

  1. Log de auditoría consultable: quién cambió qué mapa, cuándo y qué cambió exactamente.
  2. Deshacer la última operación sobre un mapa.
  3. Rehacer.
  4. Volver un mapa a una revisión anterior (rollback).
  5. 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

  • Toda mutación de mapa queda en el log con autor, fecha y contenido del cambio
  • Deshacer revierte exactamente la última operación
  • Rehacer restaura lo deshecho
  • Se puede volver a una revisión anterior arbitraria
  • El diff entre dos revisiones es legible
  • Deshacer una operación ya publicada exige republicar (no cambia el mundo en silencio)
  • Tests de integración

Archivos relevantes

  • api/src/repositories/ (todos los repos que ya escriben en game_data_revisions)
  • api/schema.sql

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

GrantFox OSSIssue tracked in GrantFox OSSMaybe RewardedIssue may be eligible for a GrantFox rewardThird CampaignCampaign: Third CampaignbountyIssue con recompensa asignadaenhancementNew feature or requestetapa-3-vivoEtapa 3 - publicar mapas en vivograntfoxPublicada en la campana de GrantFoxmodo-construccionModo construccion in-game: editor de mapas en el navegadorreward-100-usdRecompensa 100 USD - complejidad alta o fundacional

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions