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