aurganize-backend/database/migrations/000002_sessions.down.sql

99 lines
3.7 KiB
SQL

-- =============================================================================
-- AURGANIZE V6.2 - SESSIONS TABLE ROLLBACK
-- =============================================================================
-- Migration: 000002_add_sessions (DOWN)
-- Description: Removes sessions table and related objects
-- Author: Aurganize Team
-- Date: 2025-12-11
-- Version: 2.1 (Aligned to Tenant-less Sessions Model)
-- =============================================================================
-- This rollback migration removes the sessions table and all associated
-- database objects (indexes, policies, constraints).
--
-- CRITICAL WARNINGS:
-- 1. This PERMANENTLY DELETES all user sessions
-- 2. All users will be logged out immediately
-- 3. Active refresh tokens become invalid
-- 4. Cannot be undone without database backup
-- 5. Production impact: Users must re-login
--
-- SAFE ROLLBACK ORDER:
-- 1. Disable RLS
-- 2. Drop policies
-- 3. Drop triggers (if any)
-- 4. Drop constraints (implicit via table drop)
-- 5. Drop indexes
-- 6. Drop table
-- =============================================================================
-- =============================================================================
-- SECTION 1: DISABLE ROW-LEVEL SECURITY
-- =============================================================================
ALTER TABLE IF EXISTS sessions DISABLE ROW LEVEL SECURITY;
-- =============================================================================
-- SECTION 2: DROP RLS POLICIES
-- =============================================================================
-- Note: Tenant isolation policy removed in Option B. Only user-based policy exists.
DROP POLICY IF EXISTS sessions_user_isolation ON sessions;
-- =============================================================================
-- SECTION 3: DROP TRIGGERS
-- =============================================================================
-- The updated model does NOT include updated_at → no update trigger exists.
-- Still kept for safety in case older deployments had it.
DROP TRIGGER IF EXISTS update_sessions_updated_at ON sessions;
-- =============================================================================
-- SECTION 4: DROP INDEXES
-- =============================================================================
-- Explicit drops included even though DROP TABLE will remove all dependent indexes.
DROP INDEX IF EXISTS idx_sessions_user_id;
DROP INDEX IF EXISTS idx_sessions_active;
DROP INDEX IF EXISTS idx_sessions_expires_at;
DROP INDEX IF EXISTS idx_sessions_ip_address;
DROP INDEX IF EXISTS idx_sessions_last_used;
-- =============================================================================
-- SECTION 5: DROP TABLE
-- =============================================================================
-- CASCADE ensures removal of dependencies (FKs, RLS metadata, etc.)
DROP TABLE IF EXISTS sessions CASCADE;
-- =============================================================================
-- SECTION 6: VERIFICATION BLOCK
-- =============================================================================
DO $$
DECLARE
table_exists BOOLEAN;
BEGIN
SELECT EXISTS (
SELECT 1 FROM information_schema.tables
WHERE table_schema = 'public'
AND table_name = 'sessions'
) INTO table_exists;
IF table_exists THEN
RAISE WARNING 'WARNING: sessions table still exists after rollback!';
ELSE
RAISE NOTICE 'SUCCESS: sessions table removed completely';
END IF;
END $$;
-- =============================================================================
-- END OF ROLLBACK MIGRATION 000002_add_sessions.down.sql
-- =============================================================================