1
0
forked from mixa/67
Files
67/plan.md
2026-06-15 00:20:48 +03:00

334 lines
26 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# План задач для 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.
- [ ] Допустимо ли использовать дизайн только как вдохновение или требуется максимально близкая визуальная стилизация без копирования защищенных материалов.
- [ ] Формулы показателей эффективности контента для аналитики.