Форум JavaScript тематики
Реализуйте форум JavaScript тематики, в котором пользователи смогут задавать вопросы по JavaScript, обсуждать решения и делиться опытом. Сайт должен поддерживать регистрацию с разделением по ролям: пользователь, модератор, администратор.
Продумайте структуру базы данных для хранения пользователей, категорий, тем, постов и голосов. Реализуйте регистрацию и авторизацию пользователей. Настройте серверную часть для работы с API. Все операции по чтению данных (вывод категорий, тем, постов, профилей) должны выполняться через SSR для индексации поисковиками. Все операции по записи (добавление, редактирование, удаление, модерация, голосование) - через AJAX-запросы без перезагрузки страницы.
Основные возможности проекта
- Главная страница со списком категорий и количеством тем в каждой (SSR).
- Страница категории со списком тем (по 30 тем на страницу) (SSR).
- Страница темы с постами пользователей (SSR).
- Система рейтинга постов (плюсы и минусы) (AJAX).
- Три роли: пользователь, модератор, администратор.
- Пользователи могут создавать темы и отвечать в них (AJAX).
- Возможность редактировать и удалять свои посты в течение N минут (AJAX).
- Модераторы могут управлять постами и банить пользователей (AJAX).
- Администраторы могут назначать модераторов, управлять категориями и пользователями (AJAX).
- Регистрация и профили пользователей с дополнительными полями (город, ссылка на GitHub) (SSR для просмотра, AJAX для редактирования).
Регистрация и роли
На сайте должна быть реализована система регистрации и авторизации с разделением по ролям:
- При регистрации пользователь должен указать: email, логин, пароль, ФИО, город, ссылку на GitHub (опционально).
- Авторизация по логину и паролю.
- Восстановление пароля через email.
- Валидация всех полей на стороне сервера.
- Три роли пользователей:
- Пользователь - может создавать темы, отвечать в темах, редактировать и удалять свои посты в течение N минут, ставить рейтинг постам.
- Модератор - может редактировать и удалять любые посты, банить пользователей на время или навсегда, изменять рейтинг постов.
- Администратор - назначает модераторов, управляет категориями и пользователями.
- При регистрации все пользователи получают роль "пользователь".
- Назначить модератором может только администратор.
Главная страница (SSR)
На главной странице форума должен быть выведен список всех категорий. Каждая категория должна содержать:
- Название категории (ссылка на страницу категории).
- Иконка категории (изображение).
- Количество тем в категории.
- Краткое описание категории.
Страница генерируется на сервере для полной индексации поисковиками.
Страница категории (SSR + AJAX)
На странице категории должен быть выведен список тем с пагинацией (по 30 тем на страницу). Страница генерируется на сервере (SSR), но добавление новых тем происходит через AJAX. Для каждой темы должно быть указано:
- Название темы (ссылка на страницу темы).
- Имя автора (ссылка на профиль).
- Дата создания темы.
- Количество постов в теме.
- Дата последнего поста.
- Имя автора последнего поста (ссылка на профиль).
Темы должны быть отсортированы по дате последнего поста (сначала новые). Также на странице должна быть кнопка "Создать новую тему" для зарегистрированных пользователей (через AJAX).
Страница темы (SSR + AJAX)
На странице темы пользователи размещают свои посты. Страница генерируется на сервере (SSR), но новые посты добавляются через AJAX. Каждая тема начинается с заголовка и первого поста автора темы:
- Заголовок темы.
- Категория темы.
- Первый пост автора (вопрос).
- Все последующие посты (ответы).
Каждый пост должен содержать:
- Текст поста.
- Дата и время публикации.
- Имя автора (ссылка на профиль).
- Рейтинг поста (количество плюсов и минусов).
- Кнопки "плюс" и "минус" для голосования (AJAX).
Возможности для автора поста (AJAX):
- Редактировать свой пост в течение N минут после публикации.
- Удалить свой пост в течение N минут после публикации.
- По истечении N минут редактирование и удаление недоступны.
Возможности для модератора (AJAX):
- Редактировать любой пост.
- Удалять любой пост.
- Отправлять пользователя в бан (на время или навсегда).
- Изменять рейтинг любого поста.
Рейтинг постов (AJAX)
На сайте должна быть реализована система рейтинга постов через AJAX:
- Зарегистрированные пользователи могут голосовать за посты (плюс или минус) без перезагрузки страницы.
- Каждый пользователь может проголосовать за пост только один раз.
- Нельзя голосовать за свой собственный пост.
- Рейтинг поста - это сумма плюсов и минусов.
- В админ-панели модератор может корректировать рейтинг.
Создание новой темы (AJAX)
Зарегистрированные пользователи могут создавать новые темы через AJAX без перезагрузки страницы. Форма создания темы содержит:
- Заголовок темы (инпут).
- Текст первого поста (текстареа).
- Кнопка "Опубликовать".
Страница профиля (SSR + AJAX)
На странице профиля пользователь может просматривать и редактировать свои данные. Профиль генерируется на сервере (SSR), редактирование происходит через AJAX.
- Просмотр: логин, ФИО, email, город, ссылка на GitHub, дата регистрации.
- Редактирование: ФИО, email, город, ссылка на GitHub, пароль (с подтверждением старого) - через AJAX.
- Количество созданных тем.
- Количество написанных постов.
- Суммарный рейтинг всех постов пользователя.
- Дата последнего визита.
- Роль пользователя.
Пользователи могут просматривать профили других пользователей (только просмотр, без редактирования).
Личный кабинет пользователя (SSR)
В личном кабинете пользователь может управлять своими темами и постами. Страница генерируется на сервере (SSR).
- Список всех своих тем с пагинацией.
- Список всех своих постов с пагинацией.
- Фильтр по категориям.
- Статистика: общее количество тем и постов по категориям.
- Статистика: количество полученных плюсов и минусов за посты.
Админ-панель (AJAX)
В админ-панели администратор может управлять пользователями и категориями. Все операции выполняются через AJAX без перезагрузки страницы.
- Список всех пользователей с пагинацией (по 20 пользователей).
- Для каждого пользователя: логин, email, роль, статус (активен, забанен), дата регистрации.
- Действия: назначить модератором, разжаловать из модераторов, забанить, разбанить, удалить.
- При бане указать срок (на время или навсегда).
- Фильтр по роли (показать только пользователей, модераторов, администраторов).
- Поиск пользователей по логину или email.
- Управление категориями: создание, редактирование, удаление, загрузка иконки.
Взаимодействие с сервером
Гибридный подход:
- SSR - все страницы с контентом (главная, категория, тема, профиль, личный кабинет) генерируются на сервере для индексации поисковиками.
- AJAX - все операции по записи (добавление, редактирование, удаление, модерация, голосование) выполняются через AJAX-запросы без перезагрузки страницы.
Дополнительные возможности
- Поиск по темам (по названию).
- Поиск по постам (по тексту).
- Количество просмотров темы.
- Уведомления о новых ответах в теме (на email).
- Вывод лучшего ответа в теме (по максимальному рейтингу).