This commit is contained in:
kirill.khorkov
2026-01-03 21:55:16 +03:00
parent 8682d4ade1
commit 547c561ed0
5 changed files with 749 additions and 0 deletions

View File

@@ -0,0 +1,130 @@
#!/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);