add ai functions
Some checks reported errors
continuous-integration/drone/push Build encountered an error

This commit is contained in:
2026-01-15 01:59:16 +03:00
parent 739a7d172d
commit dea0676169
33 changed files with 4850 additions and 104 deletions

View File

@ -6,8 +6,9 @@
## Текущий статус
**Этап:** Фаза 2 завершена ✅, E2E тесты готовы ✅, далее Фаза 3 (AI-интеграция)
**Фаза MVP:** Базовый функционал + авторизация + расширенный функционал готовы
**Этап:** Фаза 3.1 завершена ✅ | Новые требования (Фазы 4-8) запланированы 📋
**Фаза MVP:** Базовый функционал + авторизация + расширенный функционал + AI-оценка + мини-ТЗ + история ТЗ готовы
**Следующий этап:** Фаза 4 — Права доступа
**Последнее обновление:** 2026-01-15
---
@ -58,6 +59,28 @@
| 2026-01-15 | **Testing:** Рефакторинг тестов на data-testid — стабильные селекторы вместо tbody/tr/.nth() |
| 2026-01-15 | **Testing:** Добавлены data-testid во все компоненты фронтенда (IdeasTable, TeamPage, CommentsPanel и др.) |
| 2026-01-15 | **Docs:** Создан E2E_TESTING.md — гайд по написанию e2e тестов, соглашения по data-testid |
| 2026-01-15 | **Фаза 3:** Backend AI модуль (ai.service.ts, ai.controller.ts, POST /api/ai/estimate) |
| 2026-01-15 | **Фаза 3:** Миграция AddAiEstimateFields — поля estimatedHours, complexity, estimateDetails, estimatedAt в Idea |
| 2026-01-15 | **Фаза 3:** Frontend AI сервис (services/ai.ts, hooks/useAi.ts) |
| 2026-01-15 | **Фаза 3:** Frontend AiEstimateModal — модалка с результатом оценки (часы, сложность, разбивка по ролям, рекомендации) |
| 2026-01-15 | **Фаза 3:** Кнопка AI-оценки в таблице идей (AutoAwesome icon) + колонка "Оценка" |
| 2026-01-15 | **Infra:** Добавлены AI_PROXY_BASE_URL, AI_PROXY_API_KEY в k8s/backend-deployment.yaml |
| 2026-01-15 | **Testing:** E2E тесты Фазы 3 (Playwright) — 11 тестов покрывают AI-оценку (модалка, загрузка, результат, разбивка, просмотр) |
| 2026-01-15 | **Фаза 3:** Просмотр сохранённых результатов AI-оценки — клик по ячейке "Оценка" открывает модалку с деталями |
| 2026-01-15 | **Фаза 3.1:** Backend миграция для полей specification, specificationGeneratedAt |
| 2026-01-15 | **Фаза 3.1:** Backend POST /api/ai/generate-specification endpoint + buildSpecificationPrompt |
| 2026-01-15 | **Фаза 3.1:** Backend обновлён buildPrompt() — включает ТЗ в AI-оценку для лучшей точности |
| 2026-01-15 | **Фаза 3.1:** Frontend SpecificationModal компонент (генерация/просмотр/редактирование ТЗ) |
| 2026-01-15 | **Фаза 3.1:** Frontend кнопка ТЗ в таблице (Description icon) — серая если нет ТЗ, синяя если есть |
| 2026-01-15 | **Фаза 3.1:** Frontend интеграция useGenerateSpecification hook + сохранение редактированного ТЗ |
| 2026-01-15 | **Testing:** E2E тесты Фазы 3.1 (Playwright) — 9 тестов покрывают генерацию, просмотр, редактирование ТЗ |
| 2026-01-15 | **Фаза 3.1:** Markdown-рендеринг ТЗ в режиме просмотра (react-markdown), raw markdown в режиме редактирования |
| 2026-01-15 | **Фаза 3.1:** История ТЗ — SpecificationHistory entity, миграция, GET/DELETE/POST restore endpoints |
| 2026-01-15 | **Фаза 3.1:** Frontend история ТЗ — табы (Текущее ТЗ / История), просмотр/восстановление/удаление версий |
| 2026-01-15 | **Фаза 3.1:** При перегенерации ТЗ старая версия автоматически сохраняется в историю |
| 2026-01-15 | **Фаза 3.1:** AI-промпты (ТЗ и оценка) теперь учитывают комментарии к идее |
| 2026-01-15 | **Планирование:** Добавлены новые требования — права доступа, аудит, WebSocket, темная тема, экспорт |
| 2026-01-15 | **Документация:** Обновлены REQUIREMENTS.md, ARCHITECTURE.md, ROADMAP.md — добавлены Фазы 4-8 |
---
@ -65,7 +88,33 @@
> Смотри [ROADMAP.md](ROADMAP.md) для полного плана разработки
**Сейчас:** Фаза 2 завершена — далее Фаза 3 (AI-интеграция)
**Готово:** Фазы 0-3.1 завершены
**Следующий шаг:** Фаза 4 — Права доступа 📋
### Новые требования (Фазы 4-8):
**Фаза 4: Права доступа**
- [ ] Гранулярные права (18 различных прав)
- [ ] Панель администратора
- [ ] Автор идеи (readonly)
- [ ] Admin определяется через K8s Secret
**Фаза 5: Аудит и история**
- [ ] Логирование всех действий
- [ ] Восстановление удалённых данных
- [ ] Настраиваемый срок хранения (по умолчанию 30 дней)
**Фаза 6: Real-time и WebSocket**
- [ ] Многопользовательская работа
- [ ] Индикаторы присутствия
- [ ] Конкурентное редактирование
**Фаза 7: Темная тема**
- [ ] Переключатель светлая/тёмная
- [ ] Автоопределение системной темы
**Фаза 8: Экспорт**
- [ ] Экспорт идеи в DOCX
---
@ -94,24 +143,32 @@ team-planner/
├── tests/
│ ├── package.json # Зависимости для тестов
│ ├── playwright.config.ts # Конфигурация Playwright
│ └── e2e/ # Playwright E2E тесты (54 теста)
│ └── e2e/ # Playwright E2E тесты ✅
│ ├── auth.setup.ts # Авторизация для тестов (Keycloak)
│ ├── phase1.spec.ts # Тесты Фазы 1 (17 тестов)
── phase2.spec.ts # Тесты Фазы 2 (37 тестов — D&D, цвета, комментарии, команда)
── phase2.spec.ts # Тесты Фазы 2 (37 тестов — D&D, цвета, комментарии, команда)
│ └── phase3.spec.ts # Тесты Фазы 3 (20 тестов — AI-оценка + мини-ТЗ)
├── backend/ # NestJS API
│ ├── src/
│ │ ├── auth/ # Модуль авторизации ✅
│ │ │ ├── jwt.strategy.ts # JWT валидация через JWKS
│ │ │ ├── jwt-auth.guard.ts # Глобальный guard
│ │ │ └── decorators/public.decorator.ts # @Public() для открытых endpoints
│ │ ├── ideas/ # Модуль идей (готов + reorder)
│ │ ├── ideas/ # Модуль идей (готов + reorder + history)
│ │ │ ├── entities/
│ │ │ │ ├── idea.entity.ts # Idea + specification поля
│ │ │ │ └── specification-history.entity.ts # История ТЗ
│ │ │ ├── dto/
│ │ │ │ └── reorder-ideas.dto.ts # DTO для изменения порядка
│ │ │ ├── ideas.controller.ts # PATCH /ideas/reorder
│ │ │ └── ideas.service.ts # reorder() с транзакцией
│ │ ├── team/ # Модуль команды (Фаза 2) — TeamMember + Role entities
│ │ ├── comments/ # Модуль комментариев (Фаза 2)
│ │ └── ai/ # AI-оценка (Фаза 3)
│ │ └── ai/ # AI-оценка + мини-ТЗ + история (Фаза 3 + 3.1) ✅
│ │ ├── ai.module.ts
│ │ ├── ai.service.ts # estimateIdea + generateSpecification + history + комментарии в промптах
│ │ ├── ai.controller.ts # /estimate, /generate-specification, /specification-history/*
│ │ └── dto/
│ └── ...
└── frontend/ # React приложение
├── src/
@ -129,16 +186,20 @@ team-planner/
│ │ │ ├── TeamPage.tsx # Табы: Участники / Роли
│ │ │ ├── TeamMemberModal.tsx # Модалка участника
│ │ │ └── RolesManager.tsx # Управление ролями
│ │ ── CommentsPanel/ # Комментарии к идеям
│ │ ── CommentsPanel/ # Комментарии к идеям
│ │ ├── AiEstimateModal/ # Модалка AI-оценки (Фаза 3) ✅
│ │ └── SpecificationModal/ # Модалка мини-ТЗ (Фаза 3.1) ✅
│ ├── hooks/
│ │ ── useIdeas.ts # React Query хуки + useReorderIdeas
│ │ ── useIdeas.ts # React Query хуки + useReorderIdeas
│ │ └── useAi.ts # useEstimateIdea + useGenerateSpecification + history hooks ✅
│ ├── services/
│ │ ├── api.ts # Axios + auth interceptors
│ │ ├── keycloak.ts # Keycloak instance ✅
│ │ ├── ideas.ts # API методы + reorder()
│ │ ├── team.ts # API команды
│ │ ├── roles.ts # API ролей
│ │ ── comments.ts # API комментариев
│ │ ── comments.ts # API комментариев
│ │ └── ai.ts # AI Proxy API (Фаза 3 + 3.1) ✅
│ ├── store/
│ │ └── ideas.ts # Zustand store
│ └── types/
@ -176,8 +237,10 @@ team-planner/
- **Интерфейс на русском языке** — все тексты, лейблы, placeholder'ы должны быть на русском
- AI-интеграция через ai-proxy: `/Users/vigdorov/dev/gptunnel-service/INTEGRATION.md`
- Многопользовательский режим НЕ нужен
- Экспорт и интеграции НЕ нужны
- **Многопользовательский режим НУЖЕН** — WebSocket, real-time обновления (Фаза 6)
- **Экспорт НУЖЕН** — экспорт идеи в DOCX (Фаза 8)
- **Права доступа НУЖНЫ** — гранулярная система прав, панель админа (Фаза 4)
- **Аудит НУЖЕН** — история действий с восстановлением (Фаза 5)
- Warning о React Compiler и TanStack Table можно игнорировать
- **Drag & Drop:** dnd-kit с useSortable + @dnd-kit/modifiers (restrictToVerticalAxis), DragHandle через React Context, CSS.Translate для совместимости с таблицами, reorder через транзакцию
- **Keycloak:** auth.vigdorov.ru, realm `team-planner`, client `team-planner-frontend`
@ -185,3 +248,6 @@ team-planner/
- **Production URL:** https://team-planner.vigdorov.ru (добавлен в Valid redirect URIs и Web origins клиента Keycloak)
- **CI/CD:** Drone CI (.drone.yml) — сборка backend/frontend/keycloak-theme, деплой в K8s namespace `team-planner`
- **E2E тесты:** Все компоненты имеют `data-testid` для стабильных селекторов. Перед написанием тестов читай E2E_TESTING.md!
- **AI Proxy:** Интеграция с ai-proxy-service (K8s namespace `ai-proxy`), модель `claude-3.7-sonnet`, env: AI_PROXY_BASE_URL, AI_PROXY_API_KEY
- **История ТЗ:** При перегенерации старая версия сохраняется в `specification_history`, можно просмотреть/восстановить/удалить
- **Комментарии в AI:** Промпты для генерации ТЗ и оценки трудозатрат теперь включают комментарии к идее для лучшей точности