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