Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions api/schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -652,3 +652,29 @@ CREATE INDEX IF NOT EXISTS idx_game_map_tile_entities_map
ON game_map_tile_entities(map_num, status);
CREATE INDEX IF NOT EXISTS idx_game_uploaded_graphics_created_at
ON game_uploaded_graphics(created_at DESC);

-- Historial auditable de las ediciones de mapas. Se almacenan los estados
-- anterior y posterior de la vista dispersa del mapa: esto mantiene el
-- historial exacto sin copiar los 10.000 tiles originales.
CREATE TABLE IF NOT EXISTS game_map_revisions (
id BIGSERIAL PRIMARY KEY,
map_num INTEGER NOT NULL CHECK (map_num > 0),
operation TEXT NOT NULL CHECK (operation IN ('paint', 'clear', 'publish', 'discard', 'revert', 'undo', 'redo', 'rollback')),
author_account_id UUID REFERENCES accounts(id) ON DELETE SET NULL,
before_state JSONB NOT NULL,
after_state JSONB NOT NULL,
metadata JSONB NOT NULL DEFAULT '{}'::jsonb,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

CREATE TABLE IF NOT EXISTS game_map_revision_heads (
map_num INTEGER PRIMARY KEY CHECK (map_num > 0),
current_revision_id BIGINT REFERENCES game_map_revisions(id) ON DELETE SET NULL,
redo_revision_id BIGINT REFERENCES game_map_revisions(id) ON DELETE SET NULL,
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

CREATE INDEX IF NOT EXISTS idx_game_map_revisions_map_created
ON game_map_revisions(map_num, created_at DESC, id DESC);
CREATE INDEX IF NOT EXISTS idx_game_map_revisions_author
ON game_map_revisions(author_account_id, created_at DESC);
Loading