- Add status ENUM('active','disabled','deleted') to 8 tables
- Change all physical DELETE to UPDATE status='deleted'
- All SELECT queries filter by status='active'
- toggleActive now alternates between active/disabled status
- Exceptions: monitoring_history, rate_limits, sessions keep physical purge
- audit_logs remains immutable
45 lines
2.1 KiB
SQL
45 lines
2.1 KiB
SQL
-- ============================================================================
|
|
-- ServerManager Soft Deletes
|
|
-- Adds status column for soft deletes instead of physical row removal
|
|
-- Exceptions: monitoring_history, rate_limits, sessions (physical purge OK)
|
|
-- Exceptions: audit_logs (immutable, never deleted)
|
|
-- ============================================================================
|
|
|
|
ALTER TABLE `users`
|
|
ADD COLUMN `status` ENUM('active', 'disabled', 'deleted') NOT NULL DEFAULT 'active' AFTER `updated_at`,
|
|
ADD INDEX `idx_users_status` (`status`);
|
|
|
|
ALTER TABLE `servers`
|
|
ADD COLUMN `status` ENUM('active', 'disabled', 'deleted') NOT NULL DEFAULT 'active' AFTER `updated_at`,
|
|
ADD INDEX `idx_servers_status` (`status`);
|
|
|
|
ALTER TABLE `teams`
|
|
ADD COLUMN `status` ENUM('active', 'disabled', 'deleted') NOT NULL DEFAULT 'active' AFTER `updated_at`,
|
|
ADD INDEX `idx_teams_status` (`status`);
|
|
|
|
ALTER TABLE `command_history`
|
|
ADD COLUMN `status` ENUM('active', 'disabled', 'deleted') NOT NULL DEFAULT 'active' AFTER `executed_at`,
|
|
ADD INDEX `idx_command_history_status` (`status`);
|
|
|
|
ALTER TABLE `server_user`
|
|
ADD COLUMN `status` ENUM('active', 'disabled', 'deleted') NOT NULL DEFAULT 'active' AFTER `role`,
|
|
ADD INDEX `idx_server_user_status` (`status`);
|
|
|
|
ALTER TABLE `team_user`
|
|
ADD COLUMN `status` ENUM('active', 'disabled', 'deleted') NOT NULL DEFAULT 'active' AFTER `created_at`,
|
|
ADD INDEX `idx_team_user_status` (`status`);
|
|
|
|
ALTER TABLE `team_server`
|
|
ADD COLUMN `status` ENUM('active', 'disabled', 'deleted') NOT NULL DEFAULT 'active' AFTER `role`,
|
|
ADD INDEX `idx_team_server_status` (`status`);
|
|
|
|
ALTER TABLE `api_tokens`
|
|
ADD COLUMN `status` ENUM('active', 'disabled', 'deleted') NOT NULL DEFAULT 'active' AFTER `expires_at`,
|
|
ADD INDEX `idx_api_tokens_status` (`status`);
|
|
|
|
-- ============================================================================
|
|
-- FK constraints remain unchanged:
|
|
-- ON DELETE CASCADE only fires on physical DELETE, which we no longer do.
|
|
-- monitoring_history, rate_limits, sessions keep physical purge.
|
|
-- ============================================================================
|