CREATE TABLE IF NOT EXISTS admin_users ( id BIGSERIAL PRIMARY KEY, username VARCHAR(100) NOT NULL UNIQUE, password_hash TEXT NOT NULL, is_active BOOLEAN NOT NULL DEFAULT TRUE, created_at TIMESTAMP NOT NULL DEFAULT NOW() ); CREATE TABLE IF NOT EXISTS auth_sessions ( id BIGSERIAL PRIMARY KEY, user_id BIGINT NOT NULL REFERENCES admin_users(id) ON DELETE CASCADE, session_token TEXT NOT NULL UNIQUE, created_at TIMESTAMP NOT NULL DEFAULT NOW(), last_activity_at TIMESTAMP NOT NULL DEFAULT NOW(), expires_at TIMESTAMP NOT NULL, revoked_at TIMESTAMP NULL, ip_address VARCHAR(100), user_agent TEXT ); CREATE INDEX IF NOT EXISTS idx_auth_sessions_token ON auth_sessions(session_token); CREATE INDEX IF NOT EXISTS idx_auth_sessions_user_id ON auth_sessions(user_id); CREATE INDEX IF NOT EXISTS idx_auth_sessions_last_activity ON auth_sessions(last_activity_at);