66 lines
2.5 KiB
PHP
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());
|
|
} |