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()); }