Files
VPS 4 Builder f30c4fe002
continuous-integration/webhook Deploy concluido (rx.scoreodonto.com)
chore: mover docs, scripts e arquivos obsoletos para dental-server/bkp/
2026-05-27 02:18:54 +02:00

289 lines
9.4 KiB
SQL

-- ================================================================
-- MIGRATION v2.0 - Sistema de Transformações e Gerenciamento
-- Dental Image Server - MySQL
-- ================================================================
-- Execute este arquivo no banco MySQL:
-- mysql -u root -p dental_images < migration-v2.sql
-- OU via phpMyAdmin: Import > Selecionar arquivo
-- ================================================================
-- PARTE 1: CRIAR BANCO (SE NÃO EXISTIR)
-- ================================================================
CREATE DATABASE IF NOT EXISTS dental_images
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
USE dental_images;
-- ================================================================
-- PARTE 2: CRIAR TABELA USERS (SE NÃO EXISTIR)
-- ================================================================
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
password_hash TEXT NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ================================================================
-- PARTE 3: CRIAR TABELA IMAGES
-- ================================================================
-- Drop tabela antiga se existir (CUIDADO: remove todos os dados!)
-- DROP TABLE IF EXISTS images;
-- Criar tabela images
CREATE TABLE IF NOT EXISTS images (
id INT AUTO_INCREMENT PRIMARY KEY,
image_guid VARCHAR(255) NOT NULL,
patient_name TEXT,
original_filename TEXT,
filename TEXT NOT NULL,
enabled TINYINT(1) DEFAULT 1,
tooth_number VARCHAR(10),
tooth_side VARCHAR(10),
patient_name_resumed VARCHAR(50),
original_image_id INT,
rotation INT DEFAULT 0,
flip_horizontal INT DEFAULT 0,
flip_vertical INT DEFAULT 0,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
INDEX idx_images_enabled (enabled),
INDEX idx_images_original (original_image_id),
INDEX idx_patient_name (patient_name(100)),
INDEX idx_image_guid (image_guid),
INDEX idx_created_at (created_at),
FOREIGN KEY (original_image_id) REFERENCES images(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ================================================================
-- PARTE 4: ADICIONAR COLUNAS NOVAS (SE TABELA JÁ EXISTIR)
-- ================================================================
-- Verificar e adicionar colunas se não existirem
SET @db_name = 'dental_images';
SET @table_name = 'images';
-- Coluna enabled
SET @sql = CONCAT(
'SELECT COUNT(*) INTO @col_exists FROM information_schema.columns ',
'WHERE table_schema = ? AND table_name = ? AND column_name = ''enabled''; ',
'SELECT IF(@col_exists = 0, ''ALTER TABLE images ADD COLUMN enabled TINYINT(1) DEFAULT 1'',''SELECT \\''Column enabled already exists\\'' AS message'') INTO @query; '
);
PREPARE stmt FROM @sql;
EXECUTE stmt USING @db_name, @table_name;
DEALLOCATE PREPARE stmt;
-- Executar query se necessário
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- Coluna tooth_number
SET @sql = CONCAT(
'SELECT COUNT(*) INTO @col_exists FROM information_schema.columns ',
'WHERE table_schema = ? AND table_name = ? AND column_name = ''tooth_number''; ',
'SELECT IF(@col_exists = 0, ''ALTER TABLE images ADD COLUMN tooth_number VARCHAR(10)'',''SELECT \\''Column tooth_number already exists\\'' AS message'') INTO @query; '
);
PREPARE stmt FROM @sql;
EXECUTE stmt USING @db_name, @table_name;
DEALLOCATE PREPARE stmt;
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- Coluna tooth_side
SET @sql = CONCAT(
'SELECT COUNT(*) INTO @col_exists FROM information_schema.columns ',
'WHERE table_schema = ? AND table_name = ? AND column_name = ''tooth_side''; ',
'SELECT IF(@col_exists = 0, ''ALTER TABLE images ADD COLUMN tooth_side VARCHAR(10)'',''SELECT \\''Column tooth_side already exists\\'' AS message'') INTO @query; '
);
PREPARE stmt FROM @sql;
EXECUTE stmt USING @db_name, @table_name;
DEALLOCATE PREPARE stmt;
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- Coluna patient_name_resumed
SET @sql = CONCAT(
'SELECT COUNT(*) INTO @col_exists FROM information_schema.columns ',
'WHERE table_schema = ? AND table_name = ? AND column_name = ''patient_name_resumed''; ',
'SELECT IF(@col_exists = 0, ''ALTER TABLE images ADD COLUMN patient_name_resumed VARCHAR(50)'',''SELECT \\''Column patient_name_resumed already exists\\'' AS message'') INTO @query; '
);
PREPARE stmt FROM @sql;
EXECUTE stmt USING @db_name, @table_name;
DEALLOCATE PREPARE stmt;
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- Coluna original_image_id
SET @sql = CONCAT(
'SELECT COUNT(*) INTO @col_exists FROM information_schema.columns ',
'WHERE table_schema = ? AND table_name = ? AND column_name = ''original_image_id''; ',
'SELECT IF(@col_exists = 0, ''ALTER TABLE images ADD COLUMN original_image_id INT'',''SELECT \\''Column original_image_id already exists\\'' AS message'') INTO @query; '
);
PREPARE stmt FROM @sql;
EXECUTE stmt USING @db_name, @table_name;
DEALLOCATE PREPARE stmt;
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- Coluna rotation
SET @sql = CONCAT(
'SELECT COUNT(*) INTO @col_exists FROM information_schema.columns ',
'WHERE table_schema = ? AND table_name = ? AND column_name = ''rotation''; ',
'SELECT IF(@col_exists = 0, ''ALTER TABLE images ADD COLUMN rotation INT DEFAULT 0'',''SELECT \\''Column rotation already exists\\'' AS message'') INTO @query; '
);
PREPARE stmt FROM @sql;
EXECUTE stmt USING @db_name, @table_name;
DEALLOCATE PREPARE stmt;
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- Coluna flip_horizontal
SET @sql = CONCAT(
'SELECT COUNT(*) INTO @col_exists FROM information_schema.columns ',
'WHERE table_schema = ? AND table_name = ? AND column_name = ''flip_horizontal''; ',
'SELECT IF(@col_exists = 0, ''ALTER TABLE images ADD COLUMN flip_horizontal INT DEFAULT 0'',''SELECT \\''Column flip_horizontal already exists\\'' AS message'') INTO @query; '
);
PREPARE stmt FROM @sql;
EXECUTE stmt USING @db_name, @table_name;
DEALLOCATE PREPARE stmt;
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- Coluna flip_vertical
SET @sql = CONCAT(
'SELECT COUNT(*) INTO @col_exists FROM information_schema.columns ',
'WHERE table_schema = ? AND table_name = ? AND column_name = ''flip_vertical''; ',
'SELECT IF(@col_exists = 0, ''ALTER TABLE images ADD COLUMN flip_vertical INT DEFAULT 0'',''SELECT \\''Column flip_vertical already exists\\'' AS message'') INTO @query; '
);
PREPARE stmt FROM @sql;
EXECUTE stmt USING @db_name, @table_name;
DEALLOCATE PREPARE stmt;
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- ================================================================
-- PARTE 5: CRIAR ÍNDICES (SE NÃO EXISTIREM)
-- ================================================================
-- MySQL suporta CREATE INDEX IF NOT EXISTS apenas em algumas versões
-- Usando método alternativo:
-- Índice enabled
SELECT COUNT(*) INTO @idx_exists
FROM information_schema.statistics
WHERE table_schema = @db_name
AND table_name = @table_name
AND index_name = 'idx_images_enabled';
SET @sql = IF(@idx_exists = 0,
'CREATE INDEX idx_images_enabled ON images(enabled)',
'SELECT "Index idx_images_enabled already exists" AS message'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- Índice original
SELECT COUNT(*) INTO @idx_exists
FROM information_schema.statistics
WHERE table_schema = @db_name
AND table_name = @table_name
AND index_name = 'idx_images_original';
SET @sql = IF(@idx_exists = 0,
'CREATE INDEX idx_images_original ON images(original_image_id)',
'SELECT "Index idx_images_original already exists" AS message'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- Índice patient_name
SELECT COUNT(*) INTO @idx_exists
FROM information_schema.statistics
WHERE table_schema = @db_name
AND table_name = @table_name
AND index_name = 'idx_patient_name';
SET @sql = IF(@idx_exists = 0,
'CREATE INDEX idx_patient_name ON images(patient_name(100))',
'SELECT "Index idx_patient_name already exists" AS message'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- Índice image_guid
SELECT COUNT(*) INTO @idx_exists
FROM information_schema.statistics
WHERE table_schema = @db_name
AND table_name = @table_name
AND index_name = 'idx_image_guid';
SET @sql = IF(@idx_exists = 0,
'CREATE INDEX idx_image_guid ON images(image_guid)',
'SELECT "Index idx_image_guid already exists" AS message'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- Índice created_at
SELECT COUNT(*) INTO @idx_exists
FROM information_schema.statistics
WHERE table_schema = @db_name
AND table_name = @table_name
AND index_name = 'idx_created_at';
SET @sql = IF(@idx_exists = 0,
'CREATE INDEX idx_created_at ON images(created_at)',
'SELECT "Index idx_created_at already exists" AS message'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- ================================================================
-- PARTE 6: VALIDAÇÃO FINAL
-- ================================================================
SELECT 'Migration completed successfully!' AS result;
SELECT 'Table structure:' AS info;
DESCRIBE images;
-- ================================================================
-- FIM DA MIGRATION
-- ================================================================