Files
web_work/database/migrations/verify_installation.php
kirill.khorkov 547c561ed0 Added
2026-01-03 21:55:16 +03:00

131 lines
5.6 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env php
<?php
/**
* Verification Script for Reviews System
* Checks that all components are installed correctly
*/
require_once dirname(__DIR__, 2) . '/app/Core/Database.php';
use App\Core\Database;
echo "\n";
echo "═══════════════════════════════════════════════\n";
echo " Проверка установки системы отзывов\n";
echo "═══════════════════════════════════════════════\n\n";
try {
$db = Database::getInstance();
$conn = $db->getConnection();
// Проверка таблицы reviews
echo "📋 Структура таблицы 'reviews':\n";
$result = $conn->query("SELECT column_name, data_type FROM information_schema.columns WHERE table_name = 'reviews' ORDER BY ordinal_position");
$columns = $result->fetchAll(PDO::FETCH_ASSOC);
if (empty($columns)) {
echo " ✗ Таблица 'reviews' не найдена!\n\n";
exit(1);
}
foreach ($columns as $col) {
echo "{$col['column_name']} ({$col['data_type']})\n";
}
// Проверка новых полей в products
echo "\n📋 Новые поля в таблице 'products':\n";
$result = $conn->query("SELECT column_name, data_type, column_default FROM information_schema.columns WHERE table_name = 'products' AND column_name IN ('rating', 'review_count')");
$productFields = $result->fetchAll(PDO::FETCH_ASSOC);
foreach ($productFields as $field) {
$default = $field['column_default'] ?? 'NULL';
echo "{$field['column_name']} ({$field['data_type']}) default: {$default}\n";
}
if (count($productFields) !== 2) {
echo " ⚠ Ожидалось 2 поля, найдено: " . count($productFields) . "\n";
}
// Проверка триггеров
echo "\n🔧 Триггеры для таблицы 'reviews':\n";
$result = $conn->query("SELECT tgname FROM pg_trigger WHERE tgrelid = 'reviews'::regclass");
$triggers = $result->fetchAll(PDO::FETCH_COLUMN);
if (empty($triggers)) {
echo " ⚠ Триггеры не найдены\n";
} else {
foreach ($triggers as $trigger) {
echo "{$trigger}\n";
}
}
// Проверка функций
echo "\n⚙️ Функции для работы с отзывами:\n";
$result = $conn->query("SELECT proname FROM pg_proc WHERE proname IN ('update_product_rating', 'trigger_update_product_rating', 'update_reviews_updated_at') ORDER BY proname");
$functions = $result->fetchAll(PDO::FETCH_COLUMN);
foreach ($functions as $func) {
echo "{$func}()\n";
}
// Пример продукта
echo "\n📦 Пример товара из каталога:\n";
$result = $conn->query("SELECT product_id, name, COALESCE(rating, 0) as rating, COALESCE(review_count, 0) as review_count FROM products LIMIT 1");
$product = $result->fetch(PDO::FETCH_ASSOC);
if ($product) {
echo " ID: {$product['product_id']}\n";
echo " Название: {$product['name']}\n";
echo " Рейтинг: {$product['rating']}\n";
echo " Отзывов: {$product['review_count']}\n";
}
// Проверка индексов
echo "\n📇 Индексы таблицы 'reviews':\n";
$result = $conn->query("SELECT indexname FROM pg_indexes WHERE tablename = 'reviews' ORDER BY indexname");
$indexes = $result->fetchAll(PDO::FETCH_COLUMN);
foreach ($indexes as $index) {
echo "{$index}\n";
}
// Проверка constraint
echo "\n🔒 Ограничения таблицы 'reviews':\n";
$result = $conn->query("SELECT conname, contype FROM pg_constraint WHERE conrelid = 'reviews'::regclass ORDER BY conname");
$constraints = $result->fetchAll(PDO::FETCH_ASSOC);
foreach ($constraints as $constraint) {
$types = [
'p' => 'PRIMARY KEY',
'f' => 'FOREIGN KEY',
'u' => 'UNIQUE',
'c' => 'CHECK'
];
$type = $types[$constraint['contype']] ?? $constraint['contype'];
echo "{$constraint['conname']} ({$type})\n";
}
echo "\n═══════════════════════════════════════════════\n";
echo "ВСЕ КОМПОНЕНТЫ УСТАНОВЛЕНЫ УСПЕШНО!\n";
echo "═══════════════════════════════════════════════\n\n";
echo "🎯 Следующие шаги:\n";
echo "1. Откройте страницу товара: /product/{id}\n";
echo "2. Войдите как обычный пользователь (не админ)\n";
echo "3. Оставьте тестовый отзыв с оценкой\n";
echo "4. Проверьте, что рейтинг обновился автоматически\n\n";
echo "📚 Документация:\n";
echo "- Все файлы созданы и готовы к использованию\n";
echo "- API endpoints настроены в config/routes.php\n";
echo "- Модель Review: app/Models/Review.php\n";
echo "- Контроллер: app/Controllers/ReviewController.php\n\n";
} catch (Exception $e) {
echo "\n✗ ОШИБКА: " . $e->getMessage() . "\n\n";
exit(1);
}
exit(0);