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