Added
This commit is contained in:
130
database/migrations/verify_installation.php
Executable file
130
database/migrations/verify_installation.php
Executable 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);
|
||||
|
||||
Reference in New Issue
Block a user