Files
67/plan.md
2026-06-15 00:20:48 +03:00

26 KiB
Raw Blame History

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