131 lines
5.6 KiB
PHP
Executable File
131 lines
5.6 KiB
PHP
Executable File
#!/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);
|
||
|