Added
This commit is contained in:
164
database/migrations/README.md
Normal file
164
database/migrations/README.md
Normal file
@@ -0,0 +1,164 @@
|
||||
# Миграции базы данных
|
||||
|
||||
## Применение миграции для системы отзывов
|
||||
|
||||
Эта миграция добавляет полноценную систему отзывов с рейтингом (1-5 звезд) для товаров.
|
||||
|
||||
### Что добавляется:
|
||||
|
||||
1. **Новая таблица `reviews`** с полями:
|
||||
- `review_id` - уникальный идентификатор отзыва
|
||||
- `product_id` - связь с товаром
|
||||
- `user_id` - связь с пользователем
|
||||
- `rating` - оценка от 1 до 5
|
||||
- `comment` - текст отзыва
|
||||
- `is_approved` - статус модерации
|
||||
- `created_at`, `updated_at` - временные метки
|
||||
|
||||
2. **Обновление таблицы `products`**:
|
||||
- `rating` - средний рейтинг товара (автоматически рассчитывается)
|
||||
- `review_count` - количество отзывов (автоматически обновляется)
|
||||
|
||||
3. **Триггеры и функции PostgreSQL**:
|
||||
- Автоматическое обновление рейтинга товара при добавлении/изменении/удалении отзыва
|
||||
- Автоматическое обновление `updated_at` при изменении отзыва
|
||||
|
||||
### Инструкция по применению:
|
||||
|
||||
#### Способ 1: Через командную строку PostgreSQL
|
||||
|
||||
```bash
|
||||
# Подключитесь к базе данных
|
||||
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-клиент
|
||||
|
||||
1. Откройте файл `add_reviews_system.sql`
|
||||
2. Скопируйте весь SQL-код
|
||||
3. Вставьте в окно SQL-редактора вашего клиента
|
||||
4. Выполните скрипт
|
||||
|
||||
#### Способ 3: Через PHP скрипт (если есть доступ к серверу)
|
||||
|
||||
Создайте временный файл `apply_migration.php`:
|
||||
|
||||
```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";
|
||||
}
|
||||
```
|
||||
|
||||
Затем выполните:
|
||||
```bash
|
||||
php apply_migration.php
|
||||
```
|
||||
|
||||
### Проверка установки:
|
||||
|
||||
После применения миграции выполните следующие SQL-запросы для проверки:
|
||||
|
||||
```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. **Откройте страницу любого товара** в каталоге
|
||||
2. **Убедитесь, что видна секция "Отзывы о товаре"** с формой для добавления отзыва
|
||||
3. **Оставьте тестовый отзыв**:
|
||||
- Выберите рейтинг (1-5 звезд)
|
||||
- Напишите комментарий
|
||||
- Нажмите "Отправить отзыв"
|
||||
4. **Проверьте, что**:
|
||||
- Отзыв появился в списке
|
||||
- Рейтинг товара обновился
|
||||
- Количество отзывов увеличилось
|
||||
|
||||
### API endpoints для отзывов:
|
||||
|
||||
- `POST /reviews` - создание отзыва
|
||||
- `POST /reviews/{id}` - обновление отзыва
|
||||
- `POST /reviews/{id}/delete` - удаление отзыва
|
||||
- `GET /reviews/product/{id}` - получение отзывов товара (AJAX)
|
||||
- `POST /reviews/{id}/toggle-approval` - модерация отзыва (только для админов)
|
||||
|
||||
### Права доступа:
|
||||
|
||||
- **Обычные пользователи**: могут оставлять, редактировать и удалять свои отзывы
|
||||
- **Администраторы**:
|
||||
- НЕ могут оставлять отзывы
|
||||
- Могут удалять любые отзывы
|
||||
- Могут модерировать отзывы (одобрять/отклонять)
|
||||
|
||||
### Ограничения:
|
||||
|
||||
- Один пользователь может оставить только один отзыв на товар
|
||||
- Рейтинг обязателен (от 1 до 5)
|
||||
- Комментарий опционален, максимум 1000 символов
|
||||
- Администраторы не могут оставлять отзывы
|
||||
|
||||
### Откат миграции (если нужно):
|
||||
|
||||
```sql
|
||||
-- ВНИМАНИЕ: это удалит все отзывы!
|
||||
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;
|
||||
```
|
||||
|
||||
### Поддержка:
|
||||
|
||||
Если возникли проблемы с миграцией:
|
||||
1. Проверьте права доступа к базе данных
|
||||
2. Убедитесь, что используется PostgreSQL 10+
|
||||
3. Проверьте логи ошибок PostgreSQL
|
||||
4. Убедитесь, что таблицы `users` и `products` существуют
|
||||
|
||||
---
|
||||
|
||||
**Дата создания**: 2026-01-03
|
||||
**Версия**: 1.0
|
||||
**Автор**: AI Assistant
|
||||
|
||||
Reference in New Issue
Block a user