6.4 KiB
6.4 KiB
Миграции базы данных
Применение миграции для системы отзывов
Эта миграция добавляет полноценную систему отзывов с рейтингом (1-5 звезд) для товаров.
Что добавляется:
-
Новая таблица
reviewsс полями:review_id- уникальный идентификатор отзываproduct_id- связь с товаромuser_id- связь с пользователемrating- оценка от 1 до 5comment- текст отзываis_approved- статус модерацииcreated_at,updated_at- временные метки
-
Обновление таблицы
products:rating- средний рейтинг товара (автоматически рассчитывается)review_count- количество отзывов (автоматически обновляется)
-
Триггеры и функции PostgreSQL:
- Автоматическое обновление рейтинга товара при добавлении/изменении/удалении отзыва
- Автоматическое обновление
updated_atпри изменении отзыва
Инструкция по применению:
Способ 1: Через командную строку PostgreSQL
# Подключитесь к базе данных
psql -h 185.130.224.177 -p 5481 -U admin -d postgres
# Выполните миграцию
\i /path/to/cite_practica1/database/migrations/add_reviews_system.sql
# Проверьте, что таблица создана
\dt reviews
# Проверьте структуру таблицы
\d reviews
# Проверьте новые поля в таблице products
\d products
Способ 2: Через DBeaver или другой GUI-клиент
- Откройте файл
add_reviews_system.sql - Скопируйте весь SQL-код
- Вставьте в окно SQL-редактора вашего клиента
- Выполните скрипт
Способ 3: Через PHP скрипт (если есть доступ к серверу)
Создайте временный файл apply_migration.php:
<?php
require_once __DIR__ . '/../../app/Core/Database.php';
use App\Core\Database;
$sql = file_get_contents(__DIR__ . '/add_reviews_system.sql');
try {
$db = Database::getInstance();
$db->getConnection()->exec($sql);
echo "✓ Миграция успешно применена!\n";
} catch (Exception $e) {
echo "✗ Ошибка: " . $e->getMessage() . "\n";
}
Затем выполните:
php apply_migration.php
Проверка установки:
После применения миграции выполните следующие SQL-запросы для проверки:
-- Проверка таблицы reviews
SELECT * FROM reviews LIMIT 1;
-- Проверка новых полей в products
SELECT product_id, name, rating, review_count FROM products LIMIT 5;
-- Проверка триггеров
SELECT tgname FROM pg_trigger WHERE tgrelid = 'reviews'::regclass;
-- Проверка функций
SELECT proname FROM pg_proc WHERE proname LIKE '%review%' OR proname LIKE '%rating%';
Тестирование системы отзывов:
- Откройте страницу любого товара в каталоге
- Убедитесь, что видна секция "Отзывы о товаре" с формой для добавления отзыва
- Оставьте тестовый отзыв:
- Выберите рейтинг (1-5 звезд)
- Напишите комментарий
- Нажмите "Отправить отзыв"
- Проверьте, что:
- Отзыв появился в списке
- Рейтинг товара обновился
- Количество отзывов увеличилось
API endpoints для отзывов:
POST /reviews- создание отзываPOST /reviews/{id}- обновление отзываPOST /reviews/{id}/delete- удаление отзываGET /reviews/product/{id}- получение отзывов товара (AJAX)POST /reviews/{id}/toggle-approval- модерация отзыва (только для админов)
Права доступа:
- Обычные пользователи: могут оставлять, редактировать и удалять свои отзывы
- Администраторы:
- НЕ могут оставлять отзывы
- Могут удалять любые отзывы
- Могут модерировать отзывы (одобрять/отклонять)
Ограничения:
- Один пользователь может оставить только один отзыв на товар
- Рейтинг обязателен (от 1 до 5)
- Комментарий опционален, максимум 1000 символов
- Администраторы не могут оставлять отзывы
Откат миграции (если нужно):
-- ВНИМАНИЕ: это удалит все отзывы!
DROP TRIGGER IF EXISTS trigger_review_delete_update_product_rating ON reviews;
DROP TRIGGER IF EXISTS trigger_review_insert_update_product_rating ON reviews;
DROP TRIGGER IF EXISTS trigger_reviews_updated_at ON reviews;
DROP FUNCTION IF EXISTS trigger_update_product_rating();
DROP FUNCTION IF EXISTS update_product_rating(INTEGER);
DROP FUNCTION IF EXISTS update_reviews_updated_at();
DROP TABLE IF EXISTS reviews CASCADE;
-- Удаление полей из products (опционально)
ALTER TABLE products DROP COLUMN IF EXISTS rating;
ALTER TABLE products DROP COLUMN IF EXISTS review_count;
Поддержка:
Если возникли проблемы с миграцией:
- Проверьте права доступа к базе данных
- Убедитесь, что используется PostgreSQL 10+
- Проверьте логи ошибок PostgreSQL
- Убедитесь, что таблицы
usersиproductsсуществуют
Дата создания: 2026-01-03
Версия: 1.0
Автор: AI Assistant