add ai functions
Some checks reported errors
continuous-integration/drone/push Build encountered an error
Some checks reported errors
continuous-integration/drone/push Build encountered an error
This commit is contained in:
282
ROADMAP.md
282
ROADMAP.md
@ -13,7 +13,13 @@
|
||||
| 1 | Базовый функционал | ✅ Завершена | CRUD идей, таблица, редактирование |
|
||||
| 1.5 | Авторизация | ✅ Завершена | Keycloak, JWT, защита API |
|
||||
| 2 | Расширенный функционал | ✅ Завершена | Drag&Drop, цвета, комментарии, команда |
|
||||
| 3 | AI-интеграция | ⏸️ Ожидает | Оценка времени, рекомендации |
|
||||
| 3 | AI-интеграция | ✅ Завершена | Оценка времени, рекомендации |
|
||||
| 3.1 | Генерация мини-ТЗ | ✅ Завершена | Генерация, редактирование, история ТЗ |
|
||||
| 4 | Права доступа | 📋 Планируется | Гранулярные права, панель админа |
|
||||
| 5 | Аудит и история | 📋 Планируется | Логирование действий, восстановление |
|
||||
| 6 | Real-time и WebSocket | 📋 Планируется | Многопользовательская работа |
|
||||
| 7 | Темная тема | 📋 Планируется | Переключение светлая/тёмная |
|
||||
| 8 | Экспорт | 📋 Планируется | Экспорт идеи в DOCX |
|
||||
|
||||
---
|
||||
|
||||
@ -161,37 +167,271 @@
|
||||
|
||||
---
|
||||
|
||||
## Фаза 3: AI-интеграция ⏸️
|
||||
## Фаза 3: AI-интеграция ✅
|
||||
|
||||
### Backend — Модуль AI
|
||||
- [ ] Интегрировать ai-proxy service
|
||||
- [ ] POST /api/ai/estimate
|
||||
- [ ] Получить идею и состав команды
|
||||
- [ ] Сформировать промпт
|
||||
- [ ] Отправить запрос в AI
|
||||
- [ ] Распарсить ответ
|
||||
- [ ] Сохранить оценку
|
||||
- [ ] Rate limiting для AI-запросов
|
||||
- [x] Интегрировать ai-proxy service
|
||||
- [x] POST /api/ai/estimate
|
||||
- [x] Получить идею и состав команды
|
||||
- [x] Сформировать промпт
|
||||
- [x] Отправить запрос в AI
|
||||
- [x] Распарсить ответ
|
||||
- [x] Сохранить оценку
|
||||
- [ ] Rate limiting для AI-запросов (опционально)
|
||||
|
||||
### Frontend — AI-оценка
|
||||
- [ ] Кнопка "Оценить AI" в строке/детали идеи
|
||||
- [ ] Модалка с результатом оценки
|
||||
- [ ] Общее время
|
||||
- [ ] Сложность
|
||||
- [ ] Разбивка по ролям
|
||||
- [ ] Рекомендации
|
||||
- [ ] Отображение оценки в таблице
|
||||
- [ ] Loading state для AI-запросов
|
||||
- [x] Кнопка "Оценить AI" в строке/детали идеи
|
||||
- [x] Модалка с результатом оценки
|
||||
- [x] Общее время
|
||||
- [x] Сложность
|
||||
- [x] Разбивка по ролям
|
||||
- [x] Рекомендации
|
||||
- [x] Отображение оценки в таблице
|
||||
- [x] Loading state для AI-запросов
|
||||
|
||||
---
|
||||
|
||||
## Backlog (после MVP)
|
||||
## Фаза 3.1: Генерация мини-ТЗ ✅
|
||||
|
||||
> **Генерация технического задания с помощью AI + история версий**
|
||||
|
||||
### Backend — Расширение модуля AI
|
||||
- [x] Добавить поля в Idea entity (specification, specificationGeneratedAt)
|
||||
- [x] Миграция для новых полей
|
||||
- [x] POST /api/ai/generate-specification
|
||||
- [x] Получить идею
|
||||
- [x] Сформировать промпт для генерации ТЗ
|
||||
- [x] Отправить запрос в AI
|
||||
- [x] Сохранить результат
|
||||
- [x] Обновить POST /api/ai/estimate — учитывать ТЗ в промпте
|
||||
- [x] Добавить specification в UpdateIdeaDto
|
||||
|
||||
### Backend — История ТЗ
|
||||
- [x] SpecificationHistory entity
|
||||
- [x] Миграция для specification_history таблицы
|
||||
- [x] GET /api/ai/specification-history/:ideaId
|
||||
- [x] DELETE /api/ai/specification-history/:historyId
|
||||
- [x] POST /api/ai/specification-history/:historyId/restore
|
||||
- [x] Автосохранение старого ТЗ в историю при перегенерации
|
||||
|
||||
### Backend — Комментарии в AI-промптах
|
||||
- [x] Включить комментарии к идее в промпт генерации ТЗ
|
||||
- [x] Включить комментарии к идее в промпт оценки трудозатрат
|
||||
|
||||
### Frontend — Модалка ТЗ
|
||||
- [x] Новый компонент SpecificationModal
|
||||
- [x] Режим генерации (loading → результат)
|
||||
- [x] Режим просмотра
|
||||
- [x] Режим редактирования
|
||||
- [x] Markdown-рендеринг (react-markdown)
|
||||
- [x] Кнопка ТЗ в колонке actions
|
||||
- [x] Серая — ТЗ нет
|
||||
- [x] Синяя — ТЗ есть
|
||||
- [x] Spinner — генерация
|
||||
- [x] Хук useGenerateSpecification
|
||||
- [x] API метод generateSpecification
|
||||
|
||||
### Frontend — История ТЗ
|
||||
- [x] Табы "Текущее ТЗ" / "История" (при наличии истории)
|
||||
- [x] Список исторических версий с датами
|
||||
- [x] Просмотр исторической версии
|
||||
- [x] Восстановление версии из истории
|
||||
- [x] Удаление версии из истории
|
||||
- [x] Хуки useSpecificationHistory, useDeleteSpecificationHistoryItem, useRestoreSpecificationFromHistory
|
||||
|
||||
### E2E тестирование
|
||||
- [x] Генерация ТЗ для идеи
|
||||
- [x] Просмотр существующего ТЗ
|
||||
- [x] Редактирование и сохранение ТЗ
|
||||
- [x] data-testid для новых компонентов
|
||||
|
||||
---
|
||||
|
||||
## Фаза 4: Права доступа 📋
|
||||
|
||||
> **Гранулярная система прав доступа и панель администратора**
|
||||
|
||||
### Backend — Модуль Permissions
|
||||
- [ ] User entity (userId, email, name, lastLogin)
|
||||
- [ ] UserPermissions entity (связь с User, все права как boolean поля)
|
||||
- [ ] Миграции для users и user_permissions
|
||||
- [ ] PermissionsService (getMyPermissions, getUsersWithPermissions, updateUserPermissions)
|
||||
- [ ] PermissionsController
|
||||
- [ ] GET /api/permissions/me
|
||||
- [ ] GET /api/permissions/users (admin only)
|
||||
- [ ] PATCH /api/permissions/:userId (admin only)
|
||||
- [ ] PermissionsGuard (проверка прав на endpoints)
|
||||
- [ ] @RequirePermission() декоратор
|
||||
- [ ] Env: ADMIN_EMAIL из K8s Secret
|
||||
- [ ] Middleware: создание User при первом входе (только view_ideas)
|
||||
|
||||
### Backend — Защита существующих endpoints
|
||||
- [ ] IdeasController — проверка create_ideas, edit_own/any_ideas, delete_own/any_ideas
|
||||
- [ ] CommentsController — проверка add_comments, delete_own/any_comments
|
||||
- [ ] AiController — проверка request_ai_estimate, request_ai_specification
|
||||
- [ ] TeamController — проверка manage_team, manage_roles
|
||||
|
||||
### Frontend — Панель администратора
|
||||
- [ ] AdminPage компонент
|
||||
- [ ] PermissionsTable — таблица пользователей с чекбоксами прав
|
||||
- [ ] usePermissions хуки (useMyPermissions, useUsersPermissions, useUpdatePermissions)
|
||||
- [ ] Скрытие/отключение кнопок на основе прав
|
||||
- [ ] Роутинг: /admin (только для админа)
|
||||
|
||||
### Backend — Автор идеи
|
||||
- [ ] Добавить поле authorId, authorName в Idea entity
|
||||
- [ ] Миграция для новых полей
|
||||
- [ ] Автозаполнение при создании идеи
|
||||
- [ ] Запрет изменения автора в UpdateIdeaDto
|
||||
|
||||
### Frontend — Отображение автора
|
||||
- [ ] Колонка "Автор" в таблице идей
|
||||
- [ ] Отображение автора в деталях идеи
|
||||
|
||||
### E2E тестирование
|
||||
- [ ] Тесты прав доступа
|
||||
- [ ] Тесты панели администратора
|
||||
- [ ] Тесты автора идеи
|
||||
|
||||
---
|
||||
|
||||
## Фаза 5: Аудит и история 📋
|
||||
|
||||
> **Логирование всех действий с возможностью восстановления**
|
||||
|
||||
### Backend — Модуль Audit
|
||||
- [ ] AuditLog entity (userId, userName, action, entityType, entityId, oldValue, newValue, timestamp)
|
||||
- [ ] Миграция для audit_log таблицы
|
||||
- [ ] AuditService
|
||||
- [ ] log(action, entityType, entityId, oldValue, newValue)
|
||||
- [ ] getAuditLog(filters, pagination)
|
||||
- [ ] restore(auditId)
|
||||
- [ ] cleanup(olderThanDays)
|
||||
- [ ] AuditController
|
||||
- [ ] GET /api/audit
|
||||
- [ ] POST /api/audit/:id/restore
|
||||
- [ ] GET /api/audit/settings
|
||||
- [ ] PATCH /api/audit/settings
|
||||
- [ ] Интеграция AuditService во все сервисы (Ideas, Comments, Team, AI)
|
||||
- [ ] Cron job для очистки старых записей (@nestjs/schedule)
|
||||
- [ ] Env: AUDIT_RETENTION_DAYS
|
||||
|
||||
### Frontend — Страница истории
|
||||
- [ ] AuditPage компонент
|
||||
- [ ] AuditLogTable с фильтрами
|
||||
- [ ] AuditDetailModal (просмотр diff)
|
||||
- [ ] Кнопка "Восстановить" для удалённых сущностей
|
||||
- [ ] useAudit хуки
|
||||
|
||||
### Frontend — Настройки аудита (в админ-панели)
|
||||
- [ ] Поле "Срок хранения истории" в AdminPage
|
||||
- [ ] useAuditSettings хук
|
||||
|
||||
### E2E тестирование
|
||||
- [ ] Тесты просмотра истории
|
||||
- [ ] Тесты восстановления
|
||||
- [ ] Тесты настроек аудита
|
||||
|
||||
---
|
||||
|
||||
## Фаза 6: Real-time и WebSocket 📋
|
||||
|
||||
> **Многопользовательская работа с real-time обновлениями**
|
||||
|
||||
### Backend — WebSocket Gateway
|
||||
- [ ] Установить @nestjs/websockets, socket.io
|
||||
- [ ] EventsGateway (handleConnection, handleDisconnect)
|
||||
- [ ] JWT валидация в WebSocket handshake
|
||||
- [ ] События: idea:created, idea:updated, idea:deleted, ideas:reordered
|
||||
- [ ] События: comment:created, comment:deleted
|
||||
- [ ] События: specification:generated, estimate:generated
|
||||
- [ ] События присутствия: users:online, user:joined, user:left
|
||||
- [ ] События редактирования: idea:editing, idea:stopEditing
|
||||
- [ ] Интеграция emit во все сервисы
|
||||
|
||||
### Frontend — WebSocket Provider
|
||||
- [ ] WebSocketProvider компонент (socket.io-client)
|
||||
- [ ] useWebSocket хук
|
||||
- [ ] Автоматическая синхронизация React Query при получении событий
|
||||
- [ ] Reconnect логика
|
||||
|
||||
### Frontend — Индикаторы
|
||||
- [ ] OnlineUsers компонент (список онлайн пользователей)
|
||||
- [ ] EditingIndicator (кто редактирует идею)
|
||||
- [ ] Визуальная подсветка изменённых строк
|
||||
|
||||
### Frontend — Конкурентное редактирование
|
||||
- [ ] Предупреждение при попытке редактировать занятую идею
|
||||
- [ ] Optimistic locking (проверка version/updatedAt)
|
||||
- [ ] Разрешение конфликтов
|
||||
|
||||
### E2E тестирование
|
||||
- [ ] Тесты real-time обновлений (2 браузера)
|
||||
- [ ] Тесты присутствия
|
||||
- [ ] Тесты конкурентного редактирования
|
||||
|
||||
---
|
||||
|
||||
## Фаза 7: Темная тема 📋
|
||||
|
||||
> **Поддержка светлой и тёмной темы интерфейса**
|
||||
|
||||
### Frontend — Theme Provider
|
||||
- [ ] ThemeStore (Zustand) — текущая тема, автоопределение
|
||||
- [ ] ThemeProvider (MUI createTheme с dark/light mode)
|
||||
- [ ] Сохранение выбора в localStorage
|
||||
- [ ] Автоопределение системной темы (prefers-color-scheme)
|
||||
|
||||
### Frontend — Цветовые схемы
|
||||
- [ ] Палитра для тёмной темы (см. ARCHITECTURE.md 5.1)
|
||||
- [ ] Адаптация цветов статусов и приоритетов
|
||||
- [ ] Адаптация цветов маркировки строк
|
||||
- [ ] Адаптация всех компонентов
|
||||
|
||||
### Frontend — UI
|
||||
- [ ] ThemeToggle компонент в header
|
||||
- [ ] Иконки ☀️/🌙 для переключения
|
||||
|
||||
### E2E тестирование
|
||||
- [ ] Тест переключения темы
|
||||
- [ ] Визуальный тест тёмной темы
|
||||
|
||||
---
|
||||
|
||||
## Фаза 8: Экспорт 📋
|
||||
|
||||
> **Экспорт идеи в документ DOCX**
|
||||
|
||||
### Backend — Модуль Export
|
||||
- [ ] Установить docx библиотеку
|
||||
- [ ] ExportService
|
||||
- [ ] generateIdeaDocx(ideaId) — генерация DOCX
|
||||
- [ ] Включение: название, описание, статус, приоритет, модуль
|
||||
- [ ] Включение: целевая аудитория, боль, роль AI, способ проверки
|
||||
- [ ] Включение: AI-оценка (если есть)
|
||||
- [ ] Включение: ТЗ в markdown → форматированный текст (если есть)
|
||||
- [ ] Включение: комментарии (автор, дата, текст)
|
||||
- [ ] ExportController
|
||||
- [ ] GET /api/export/idea/:id
|
||||
|
||||
### Frontend — Кнопка экспорта
|
||||
- [ ] Кнопка экспорта в строке таблицы (⬇️ иконка)
|
||||
- [ ] useExportIdea хук
|
||||
- [ ] Скачивание файла через blob
|
||||
|
||||
### E2E тестирование
|
||||
- [ ] Тест экспорта идеи
|
||||
- [ ] Проверка содержимого DOCX
|
||||
|
||||
---
|
||||
|
||||
## Backlog (после фаз 4-8)
|
||||
|
||||
- [ ] WebSocket для real-time обновлений
|
||||
- [ ] Виртуализация списка (1000+ идей)
|
||||
- [ ] Keyboard shortcuts
|
||||
- [ ] Сохранение пресетов фильтров
|
||||
- [ ] Темная тема
|
||||
- [ ] Уведомления (email/push при упоминании)
|
||||
- [ ] Интеграция с Jira/Trello (опционально)
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user