35330-vm/Backend/db/migrate.php
Flatlogic Bot 20046a4844 Versao 17
2025-10-29 17:18:21 +00:00

66 lines
2.5 KiB
PHP

<?php
// Script de migração aprimorado para rodar múltiplos arquivos SQL de forma idempotente.
require_once __DIR__ . '/config.php';
try {
$pdo = db();
// 1. Garantir que a tabela de controle de migrações exista
$pdo->exec("CREATE TABLE IF NOT EXISTS `migrations` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`migration_name` VARCHAR(255) NOT NULL UNIQUE,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;");
// 2. Obter migrações já executadas
$executed_migrations_stmt = $pdo->query("SELECT migration_name FROM migrations");
$executed_migrations = $executed_migrations_stmt->fetchAll(PDO::FETCH_COLUMN);
// 3. Encontrar todos os arquivos de migração
$migration_files = glob(__DIR__ . '/migrations/*.sql');
sort($migration_files);
$new_migrations_run = false;
// 4. Iterar e executar novas migrações
foreach ($migration_files as $file) {
$migration_name = basename($file);
if (!in_array($migration_name, $executed_migrations)) {
echo "Executando migração: {$migration_name}...\n";
$sql = file_get_contents($file);
$pdo->exec($sql);
// Registrar a migração como executada
$stmt = $pdo->prepare("INSERT INTO migrations (migration_name) VALUES (:migration_name)");
$stmt->execute(['migration_name' => $migration_name]);
echo "Migração '{$migration_name}' executada com sucesso!\n";
$new_migrations_run = true;
}
}
if (!$new_migrations_run) {
echo "Nenhuma nova migração para executar. O banco de dados já está atualizado.\n";
} else {
echo "\nMigrações concluídas.\n";
}
// Lógica de atualização de senha do usuário de teste (executada sempre)
// Garante que a senha seja corrigida mesmo que a migração inicial tenha falhado.
$password = 'password123';
$hash = password_hash($password, PASSWORD_DEFAULT);
// Força a atualização da senha para o usuário de teste, independentemente do valor atual.
$update_hash_sql = "UPDATE users SET password_hash = :hash WHERE email = 'chefe@familia.com'";
$stmt_user = $pdo->prepare($update_hash_sql);
$stmt_user->execute(['hash' => $hash]);
if ($stmt_user->rowCount() > 0) {
echo "Hash do usuário de teste foi corrigido para o valor padrão.\n";
}
} catch (PDOException $e) {
die("Erro na migração: " . $e->getMessage());
}