#!/usr/bin/env php 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);