26 KiB
26 KiB
План задач для Fable
Источник требований: ТЗ_единый.md.
Визуальный референс: https://donstu.ru/.
Назначение системы по ТЗ: единая централизованная цифровая платформа университета для хранения, систематизации, управления и распространения медиаконтента.
Важно: не добавлять реальные данные, людей, подразделения, интеграции, юридические сведения, брендовые материалы или функциональность, которых нет в ТЗ или в явно подтвержденных требованиях. Если нужен контент для макетов, использовать явно помеченные демо-заглушки.
0. Ограничения и продуктовые правила
- Строить платформу управления медиаконтентом университета, а не общий сайт университета.
- Реализовать два контура: публичный доступ и персонифицированный доступ после аутентификации.
- Использовать русский язык интерфейса.
- Учитывать группы пользователей из ТЗ: студенты, преподаватели, сотрудники редакций, приглашенные спикеры, администраторы.
- Использовать начальную ролевую модель из ТЗ: администратор, редактор, менеджер, пользователь.
- Не копировать логотипы, фотографии, тексты и брендовые материалы
donstu.ru, если они не предоставлены отдельно. - Использовать
donstu.ruтолько как референс по структуре, визуальному языку и UX-паттернам. - Все спорные пункты выносить в список вопросов, а не додумывать самостоятельно.
1. Дизайн и UI-система
- Сделать адаптивную UI-систему в официальном университетском стиле по мотивам
donstu.ru. - Использовать визуальные признаки референса: крупная типографика, официальный синий акцент, светлые секции, контрастные кнопки, карточная сетка, большие отступы.
- Использовать синий акцент, близкий к
#11519c, как уdonstu.ru, если заказчик не предоставит другую палитру. - Использовать современный гротеск в духе Golos, как на референсе, либо доступный аналог.
- Реализовать переключатель светлой и темной темы.
- Реализовать панель доступности: размер текста, цветовая схема, включение/отключение изображений.
- Реализовать переиспользуемые компоненты: шапка, полноэкранное меню, поиск, вкладки, карточки, кнопки, формы, фильтры, таблицы, модальные окна, предпросмотр медиа.
- Проверить все ключевые экраны на desktop и mobile.
- Не делать визуальный клон
donstu.ru; задача — использовать референс как направление.
2. Публичный контур
- Создать публичную главную страницу платформы.
- Добавить верхнюю шапку с меню, поиском, переключателем темы, кнопкой доступности и входом в личный кабинет.
- Добавить полноэкранное меню по примеру
donstu.ru. - В меню использовать только разделы, относящиеся к платформе: новости, медиа, мероприятия, спикеры, категории, вход.
- Добавить hero-блок для избранного публичного контента.
- Добавить популярные поисковые запросы или быстрые фильтры, если для них есть данные; иначе показать демо-заглушки.
- Добавить публичный блок новостей и статей с вкладками категорий.
- Добавить публичный блок медиаматериалов: аудио, видео, текстовые и графические материалы.
- Добавить публичный блок мероприятий, так как просмотр мероприятий указан в ТЗ.
- Добавить публичный блок спикеров, так как поиск спикеров указан в ТЗ.
- Добавить футер с навигацией по платформе и сервисными ссылками в пределах подтвержденного объема.
3. Каталоги, поиск и просмотр материалов
- Реализовать глобальный полнотекстовый поиск по всем типам контента.
- Добавить фильтрацию по категориям, авторам, тегам, типам контента и дате.
- Добавить сортировку результатов.
- Добавить страницу результатов поиска.
- Добавить состояния загрузки, ошибки и пустой выдачи.
- Создать публичный каталог публикаций.
- Создать публичный каталог медиаматериалов.
- Создать публичный каталог мероприятий.
- Создать публичный каталог спикеров.
- Создать страницу детального просмотра публикации или медиаматериала.
- Создать страницу детального просмотра спикера.
- Уточнить, является ли мероприятие отдельной сущностью или типом публикации/медиаматериала, потому что в ТЗ мероприятия есть в функциях, но отсутствуют в таблице информационных объектов.
4. Аутентификация и доступ
- Реализовать регистрацию пользователя.
- Реализовать вход по логину и паролю.
- Реализовать token-based authentication.
- Реализовать выход из системы.
- Реализовать смену пароля.
- Хранить пароли только в защищенном хэшированном виде.
- Связывать действия пользователя с его учетной записью.
- Защитить маршруты персонифицированного контура.
- Добавить обработку истекшей или некорректной сессии.
5. Профиль пользователя
- Создать страницу профиля пользователя.
- Реализовать редактирование профиля.
- Показывать роль и уровень доступа пользователя.
- Показывать подписки пользователя.
- Показывать уведомления пользователя.
- Показывать действия пользователя там, где это разрешено ролью.
6. Управление контентом
- Реализовать создание публикаций.
- Реализовать редактирование публикаций.
- Реализовать удаление публикаций с учетом прав доступа.
- Реализовать публикацию и архивирование материалов.
- Реализовать загрузку медиаматериалов: аудио, видео, текстовые и графические файлы.
- Реализовать назначение категорий.
- Реализовать назначение тегов.
- Реализовать метаданные автора.
- Реализовать управление видимостью материала с учетом роли.
- Реализовать жизненный цикл контента: создание, модерация, проверка, публикация, архивирование.
- Показывать статус модерации материала.
- Реализовать сохранение черновика.
7. Подписки и уведомления
- Реализовать подписку на категории.
- Реализовать подписку на спикеров.
- Реализовать подписку на темы или теги, если они утверждены как направления/темы.
- Реализовать подписку на мероприятия, если мероприятие утверждено как отдельная сущность.
- Создать персональную ленту по подпискам.
- Создавать уведомления о новом контенте по подпискам.
- Реализовать центр уведомлений.
- Реализовать статусы уведомлений: прочитано и не прочитано.
8. Комментарии и взаимодействие
- Реализовать комментарии для авторизованных пользователей.
- Реализовать создание комментария.
- Реализовать редактирование и удаление комментария с учетом прав доступа.
- Добавить модерацию комментариев, если это требуется ролевой моделью.
- Показывать комментарии на странице детального просмотра материала.
- Добавить состояния загрузки и пустого списка комментариев.
9. Административная панель
- Создать административный dashboard.
- Реализовать управление пользователями.
- Реализовать управление ролями.
- Реализовать управление правами доступа.
- Реализовать очередь модерации контента.
- Реализовать управление медиатекой.
- Реализовать управление категориями.
- Реализовать управление тегами.
- Реализовать управление спикерами.
- Реализовать управление уведомлениями.
- Реализовать просмотр журнала действий.
- Реализовать аналитический dashboard.
10. Аналитика
- Считать просмотры публикаций.
- Считать активность пользователей.
- Считать количество подписчиков.
- Показывать популярность публикаций.
- Показывать показатели эффективности контента, если формула показателей согласована.
- Формировать аналитические отчеты или экран отчетов.
- Ограничить доступ к аналитике ролями.
11. Модель данных
- Спроектировать сущность
User. - Спроектировать сущность
Role. - Спроектировать сущность
Permission. - Спроектировать связь
UserRole. - Спроектировать сущность
Speaker. - Спроектировать сущность
MediaMaterial. - Спроектировать сущность
Category. - Спроектировать сущность
Tag. - Спроектировать сущность
Subscription. - Спроектировать связь подписки на спикера.
- Спроектировать связь подписки на категорию.
- Спроектировать сущность
Comment. - Спроектировать сущность
Notification. - Спроектировать сущность
ActionLog. - Уточнить и при необходимости спроектировать сущность
Event.
12. Backend-архитектура
- Реализовать backend business logic на Go.
- Разделить backend на Go-микросервисы.
- Использовать Elysia.js как API gateway/router layer.
- Запускать gateway на выбранном JS runtime: Bun, Node.js или Deno.
- Для Elysia.js считать Bun предпочтительным вариантом, если совместимость Node.js/Deno не подтверждена отдельно.
- Пропускать все frontend API-запросы через Elysia gateway.
- Держать Go-сервисы внутренними, за gateway.
- Использовать PostgreSQL как основную реляционную БД.
- Использовать CDN или media storage для загруженных медиафайлов.
- Обеспечить единые auth, RBAC, request context, logging и error handling через gateway и сервисы.
13. Go-микросервисы
- Auth service: регистрация, вход, токены, смена пароля.
- User service: профили, пользователи, роли, права доступа.
- Content service: публикации, медиаматериалы, черновики, публикация, архивирование.
- Taxonomy service: категории и теги.
- Speaker service: профили спикеров и подписки на спикеров.
- Subscription service: подписки на категории, темы/теги и спикеров.
- Notification service: создание уведомлений, статусы прочитано/не прочитано.
- Comment service: комментарии авторизованных пользователей и hooks для модерации.
- Search service: полнотекстовый поиск, фильтры, сортировка.
- Analytics service: просмотры, активность, подписчики, отчеты.
- Audit service: журнал действий пользователей и администраторов.
- Media service: валидация загрузок, метаданные файлов, ссылки на CDN/media storage.
- Event service добавлять только после подтверждения отдельной сущности мероприятий.
14. Elysia Gateway
- Создать маршруты
/api/auth/*к Auth service. - Создать маршруты
/api/users/*к User service. - Создать маршруты
/api/content/*к Content service. - Создать маршруты
/api/media/*к Media service. - Создать маршруты
/api/categories/*и/api/tags/*к Taxonomy service. - Создать маршруты
/api/speakers/*к Speaker service. - Создать маршруты
/api/subscriptions/*к Subscription service. - Создать маршруты
/api/notifications/*к Notification service. - Создать маршруты
/api/comments/*к Comment service. - Создать маршруты
/api/search/*к Search service. - Создать маршруты
/api/analytics/*к Analytics service. - Создать маршруты
/api/admin/*для admin-only операций. - Валидировать входящие запросы на gateway.
- Передавать authenticated user context во внутренние Go-сервисы.
- Централизовать CORS на gateway.
- Централизовать rate limiting на gateway.
- Централизовать auth middleware на gateway.
- Централизовать формат ошибок на gateway.
- Добавить health checks для gateway и каждого Go-сервиса.
15. Взаимодействие микросервисов
- Начать с HTTP/JSON между Elysia gateway и Go-сервисами, если не появится подтвержденная причина использовать другой транспорт.
- Описать OpenAPI-контракты для каждого сервиса.
- Сделать внутренние URL сервисов настраиваемыми через environment variables.
- Использовать единый формат error response.
- Добавить request ID для трассировки через gateway и сервисы.
- Добавить structured logs.
- Добавить базовые метрики состояния сервисов.
16. API и хранение данных
- Создать миграции PostgreSQL.
- Создать API для аутентификации.
- Создать API для пользователей, ролей и прав.
- Создать API для публикаций и медиаматериалов.
- Создать API для категорий и тегов.
- Создать API для спикеров.
- Создать API для подписок.
- Создать API для комментариев.
- Создать API для уведомлений.
- Создать API для поиска.
- Создать API для аналитики.
- Создать API для журнала действий.
- Создать abstraction layer для CDN/media storage.
17. Безопасность
- Требовать аутентификацию для функций персонифицированного контура.
- Реализовать role-based access control.
- Разграничить доступ к данным по ролям.
- Проверять права доступа на каждом защищенном API endpoint.
- Защитить персональные данные согласно требованиям законодательства РФ, указанным в ТЗ.
- Валидировать загружаемые файлы.
- Ограничить типы и размеры загружаемых файлов.
- Журналировать действия пользователей и администраторов.
- Не раскрывать внутренние URL Go-сервисов наружу.
18. Frontend
- Использовать React и TailwindCSS, как указано в ТЗ.
- Построить публичный контур.
- Построить персонифицированный контур.
- Построить административную панель.
- Подключить frontend к Elysia gateway.
- Реализовать protected routes.
- Реализовать role-based UI states.
- Реализовать адаптивность для мобильных устройств.
- Реализовать кроссбраузерную совместимость.
19. Тестирование
- Добавить unit tests.
- Добавить integration tests.
- Добавить system tests.
- Добавить security tests.
- Добавить load tests.
- Протестировать публичный контур без авторизации.
- Протестировать персонифицированный контур с авторизацией.
- Протестировать ролевые ограничения.
- Протестировать загрузку медиафайлов.
- Протестировать поиск, фильтры и сортировку.
- Протестировать уведомления по подпискам.
- Протестировать административные сценарии.
- Протестировать responsive layout.
- Протестировать доступность базовых UI controls.
20. Развертывание и инфраструктура
- Подготовить Docker setup.
- Подготовить окружение для Elysia gateway.
- Подготовить окружение для Go-сервисов.
- Подготовить PostgreSQL.
- Подготовить CDN/media storage.
- Настроить резервное копирование.
- Настроить восстановление из резервной копии.
- Подготовить тестовое развертывание.
- Подготовить checklist промышленного ввода.
- Добавить health checks.
- Добавить базовый мониторинг и логи.
21. Миграция и подготовка данных
- Проанализировать существующие каналы хранения и распространения: мессенджеры, облака, архивы, сайты, соцсети.
- Привести данные по спикерам, публикациям, медиа и пользователям к структурированному виду.
- Удалить дубликаты.
- Нормализовать форматы.
- Проверить метаданные.
- Категоризировать материалы.
- Подготовить план миграции данных.
- Назначить ответственных со стороны заказчика.
22. Документация
- Подготовить руководство пользователя.
- Подготовить руководство администратора.
- Подготовить программу и методику испытаний.
- Подготовить эксплуатационную документацию по согласованию с заказчиком.
- Подготовить приемочный checklist.
- Подготовить материалы для обучения пользователей и администраторов.
23. Приемка
- Провести промежуточные демонстрации модулей.
- Провести тестовое развертывание.
- Провести опытную эксплуатацию.
- Собрать замечания.
- Устранить замечания.
- Подготовить финальную передачу после тестирования.
- Подготовить акт сдачи-приемки.
24. Вопросы, которые нужно подтвердить
- Финальное название платформы.
- Логотип и разрешенные брендовые материалы.
- Источник реальных данных для миграции.
- Точная матрица ролей и прав доступа.
- Являются ли мероприятия отдельной сущностью или частью контента.
- Точный runtime для Elysia gateway: Bun, Node.js или Deno.
- Допустимо ли использовать дизайн только как вдохновение или требуется максимально близкая визуальная стилизация без копирования защищенных материалов.
- Формулы показателей эффективности контента для аналитики.