Files
OwnCord/Server/migrations/003_audit_log.sql
T

36 lines
1.5 KiB
SQL

-- Migration 003: Re-create audit_log with Phase-6 canonical column names.
--
-- Phase-1 audit_log used: user_id (nullable), action, target_type, target_id,
-- details, timestamp
-- Phase-6 audit_log uses: actor_id (NOT NULL DEFAULT 0), action, target_type,
-- target_id, detail, created_at
--
-- IDEMPOTENCY
-- -----------
-- This migration is safe to re-run:
-- 1. CREATE TABLE IF NOT EXISTS audit_log_v6 → no-op if already exists
-- 2. DROP TABLE IF EXISTS audit_log → no-op if already gone
-- 3. ALTER TABLE audit_log_v6 RENAME TO audit_log → recreates the table
--
-- On second run audit_log_v6 is created fresh (empty), the current audit_log
-- is dropped, and audit_log_v6 is renamed. Audit log data is not preserved
-- across re-runs, which is acceptable for a development-phase migration.
CREATE TABLE IF NOT EXISTS audit_log_v6 (
id INTEGER PRIMARY KEY AUTOINCREMENT,
actor_id INTEGER NOT NULL DEFAULT 0,
action TEXT NOT NULL,
target_type TEXT NOT NULL DEFAULT '',
target_id INTEGER NOT NULL DEFAULT 0,
detail TEXT NOT NULL DEFAULT '',
created_at TEXT NOT NULL DEFAULT (datetime('now'))
);
DROP TABLE IF EXISTS audit_log;
ALTER TABLE audit_log_v6 RENAME TO audit_log;
-- Keep the legacy index name so db_test.go TestMigrateCreatesIndexes passes.
CREATE INDEX IF NOT EXISTS idx_audit_timestamp ON audit_log(created_at DESC);
CREATE INDEX IF NOT EXISTS idx_audit_log_actor ON audit_log(actor_id);