-- ============================================
-- База данных: blagaya_vest
-- Кодировка: utf8mb4_general_ci (как вы выбрали)
-- ============================================
-- 1. Создаем таблицу пользователей
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(255) NOT NULL UNIQUE,
login VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
name VARCHAR(100) NOT NULL,
photo VARCHAR(500) DEFAULT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;
-- 2. Создаем таблицу отзывов
CREATE TABLE IF NOT EXISTS reviews (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
text TEXT NOT NULL,
rating TINYINT NOT NULL,
topic ENUM('faith', 'life', 'family', 'hope', 'gratitude', 'miracle') NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB;
-- 3. Создаем таблицу лайков
CREATE TABLE IF NOT EXISTS likes (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
review_id INT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY unique_like (user_id, review_id),
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (review_id) REFERENCES reviews(id) ON DELETE CASCADE
) ENGINE=InnoDB;
-- 4. Создаем представление (отзывы + автор + счетчик лайков)
CREATE OR REPLACE VIEW reviews_view AS
SELECT
r.id,
r.text,
r.rating,
r.topic,
r.created_at,
u.id AS user_id,
u.name AS author_name,
COUNT(l.id) AS likes_count
FROM reviews r
JOIN users u ON r.user_id = u.id
LEFT JOIN likes l ON r.id = l.review_id
GROUP BY r.id, r.text, r.rating, r.topic, r.created_at, u.id, u.name
ORDER BY r.created_at DESC;
-- 5. Тестовые пользователи (пароль везде: 123456)
INSERT INTO users (email, login, password, name) VALUES
('alex@mail.ru', 'alex_p', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'Александр Петров'),
('elena@mail.ru', 'elena_s', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'Елена Смирнова'),
('mikhail@mail.ru', 'mikhail_i', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'Михаил Иванов'),
('anna@mail.ru', 'anna_k', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'Анна Козлова'),
('maria@mail.ru', 'maria_s', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'Мария Соколова'),
('dmitry@mail.ru', 'dmitry_v', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'Дмитрий Волков');
-- 6. Тестовые отзывы
INSERT INTO reviews (user_id, text, rating, topic) VALUES
(1, 'Благая Весть стала для меня настоящим открытием. Здесь я нашёл ответы на многие вопросы о вере.', 3, 'faith'),
(2, 'Очень тёплое и душевное сообщество. Спасибо за вашу работу и поддержку!', 3, 'gratitude'),
(3, 'Статьи о семье помогли мне по-новому взглянуть на отношения с близкими.', 2, 'family'),
(4, 'Читаю Библиотеку каждый день. Толкования очень глубокие и понятные.', 3, 'faith'),
(5, 'Здесь я обрела надежду в трудный период жизни. Спасибо за ваши молитвы.', 3, 'hope'),
(6, 'Интересные дискуссии на форуме. Много мудрых людей.', 2, 'life');
-- 7. Тестовые лайки
INSERT INTO likes (user_id, review_id) VALUES
(1, 2), (1, 3),
(2, 1), (2, 4),
(3, 1), (3, 2),
(4, 1), (4, 3),
(5, 2), (5, 4),
(6, 1), (6, 3);
-- 8. Проверка данных
SELECT * FROM reviews_view;