334 lines
26 KiB
Markdown
334 lines
26 KiB
Markdown
# План задач для 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.
|
||
- [ ] Допустимо ли использовать дизайн только как вдохновение или требуется максимально близкая визуальная стилизация без копирования защищенных материалов.
|
||
- [ ] Формулы показателей эффективности контента для аналитики.
|