Some checks reported errors
continuous-integration/drone/push Build encountered an error
19 KiB
19 KiB
Контекст проекта Team Planner
Этот файл обновляется агентами для передачи контекста. Обновляй его после каждой значимой работы!
Текущий статус
Этап: Фаза 3.1 завершена ✅ | Новые требования (Фазы 4-8) запланированы 📋 Фаза MVP: Базовый функционал + авторизация + расширенный функционал + AI-оценка + мини-ТЗ + история ТЗ готовы Следующий этап: Фаза 4 — Права доступа Последнее обновление: 2026-01-15
Что сделано
| Дата | Что сделано |
|---|---|
| 2025-12-29 | Созданы REQUIREMENTS.md, CLAUDE.md, CONTEXT.md |
| 2025-12-29 | Создан ARCHITECTURE.md (C4, sequences, API, UI prototypes, спецификация) |
| 2025-12-29 | Создан ROADMAP.md — план разработки по фазам |
| 2025-12-29 | Создан DEVELOPMENT.md — правила локальной разработки |
| 2025-12-29 | Фаза 0: docker-compose.yml для PostgreSQL |
| 2025-12-29 | Фаза 0: Backend (NestJS + TypeORM + PostgreSQL + class-validator) |
| 2025-12-29 | Фаза 0: Frontend (Vite + React + MUI + Zustand + TanStack + dnd-kit) |
| 2025-12-29 | Фаза 1: Backend Ideas module (entity, DTO, service, controller) |
| 2025-12-29 | Фаза 1: Frontend — API сервис (services/ideas.ts) |
| 2025-12-29 | Фаза 1: Frontend — Zustand store для фильтров и пагинации |
| 2025-12-29 | Фаза 1: Frontend — React Query хуки (useIdeas.ts) |
| 2025-12-29 | Фаза 1: Frontend — IdeasTable с TanStack Table |
| 2025-12-29 | Фаза 1: Frontend — Фильтры (статус, приоритет, модуль, поиск) |
| 2025-12-29 | Фаза 1: Frontend — Inline-редактирование ячеек (double-click) |
| 2025-12-29 | Фаза 1: Frontend — Модалка создания идеи |
| 2025-12-29 | Фаза 1: Frontend — Skeleton loader и empty state |
| 2025-12-29 | Фаза 1: Frontend — Удаление идей |
| 2025-12-31 | Исправлен баг: Select в inline-редактировании закрывался при клике (MenuProps.disablePortal) |
| 2025-12-31 | Локализация интерфейса на русский язык |
| 2026-01-13 | Фаза 2: Backend — PATCH /api/ideas/reorder endpoint (ReorderIdeasDto, транзакция) |
| 2026-01-13 | Фаза 2: Frontend — Drag & Drop с dnd-kit (DraggableRow, drag handle) |
| 2026-01-13 | Фаза 2: Исправлены баги D&D: setNodeRef, сортировка по order, оптимистичные обновления, DragOverlay |
| 2026-01-13 | Добавлены Selenium E2E тесты (tests/e2e/) — Фаза 1 ✅, Фаза 2 частично |
| 2026-01-13 | Авторизация: Backend Auth модуль (JWT + Keycloak JWKS) |
| 2026-01-13 | Авторизация: Frontend AuthProvider (keycloak-js, auto token refresh) |
| 2026-01-14 | E2E тесты переписаны с Selenium на Playwright (tests/e2e/*.spec.ts) |
| 2026-01-14 | Фаза 2: Улучшен Drag & Drop — добавлен @dnd-kit/modifiers, исправлен race condition с drag handle, restrictToVerticalAxis |
| 2026-01-14 | Production: Настроен Keycloak для production (team-planner.vigdorov.ru), обновлён Dockerfile с Keycloak переменными |
| 2026-01-14 | UI: Страница логина (LoginPage) — кнопка "Войти", описание приложения, контакт для получения доступа |
| 2026-01-14 | UI: Кнопка выхода на главной странице (IconButton с Logout) |
| 2026-01-14 | Infra: Добавлен KEYCLOAK_REALM_URL в k8s/backend-deployment.yaml |
| 2026-01-14 | Keycloak Theme: Кастомная тема для Keycloak (MUI стиль) — keycloak-theme/ |
| 2026-01-14 | CI/CD: Добавлены steps build-keycloak-theme и deploy-keycloak-theme в .drone.yml |
| 2026-01-14 | Фаза 2: Цветовая маркировка — ColorPickerCell, цветной фон строки, фильтр по цвету |
| 2026-01-14 | Фаза 2: Комментарии — backend модуль (entity, service, controller, миграция), frontend (CommentsPanel, раскрывающаяся панель) |
| 2026-01-14 | UX: Хук useAuth для данных пользователя, имя в header, автор комментариев из Keycloak |
| 2026-01-14 | Фаза 2: Управление командой — backend (TeamMember entity, CRUD, summary), frontend (TeamPage, табы навигации) |
| 2026-01-14 | Фаза 2: Динамические роли — Role entity вместо enum, CRUD API (/api/roles), RolesManager UI, миграция данных |
| 2026-01-15 | Testing: E2E тесты Фазы 2 (Playwright) — 54 теста покрывают D&D, цвета, комментарии, команду |
| 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 |
Текущая задача
Смотри ROADMAP.md для полного плана разработки
Готово: Фазы 0-3.1 завершены ✅ Следующий шаг: Фаза 4 — Права доступа 📋
Новые требования (Фазы 4-8):
Фаза 4: Права доступа
- Гранулярные права (18 различных прав)
- Панель администратора
- Автор идеи (readonly)
- Admin определяется через K8s Secret
Фаза 5: Аудит и история
- Логирование всех действий
- Восстановление удалённых данных
- Настраиваемый срок хранения (по умолчанию 30 дней)
Фаза 6: Real-time и WebSocket
- Многопользовательская работа
- Индикаторы присутствия
- Конкурентное редактирование
Фаза 7: Темная тема
- Переключатель светлая/тёмная
- Автоопределение системной темы
Фаза 8: Экспорт
- Экспорт идеи в DOCX
Файловая структура
team-planner/
├── CLAUDE.md # Точка входа для агентов
├── DEVELOPMENT.md # Правила локальной разработки
├── CONTEXT.md # Этот файл — текущий контекст
├── REQUIREMENTS.md # Требования к продукту
├── ARCHITECTURE.md # Архитектура, API, UI
├── ROADMAP.md # План разработки
├── E2E_TESTING.md # Гайд по E2E тестированию ✅
├── docker-compose.yml # PostgreSQL и сервисы
├── .drone.yml # CI/CD pipeline (Drone CI)
├── keycloak-theme/ # Кастомная тема Keycloak ✅
│ ├── Dockerfile # Образ keycloak-team-planner
│ └── team-planner/
│ └── login/ # Тема страницы логина (MUI стиль)
│ ├── template.ftl
│ ├── login.ftl
│ ├── theme.properties
│ ├── resources/css/login.css
│ └── messages/messages_ru.properties
├── tests/
│ ├── package.json # Зависимости для тестов
│ ├── playwright.config.ts # Конфигурация Playwright
│ └── e2e/ # Playwright E2E тесты ✅
│ ├── auth.setup.ts # Авторизация для тестов (Keycloak)
│ ├── phase1.spec.ts # Тесты Фазы 1 (17 тестов)
│ ├── 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 + 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 + 3.1) ✅
│ │ ├── ai.module.ts
│ │ ├── ai.service.ts # estimateIdea + generateSpecification + history + комментарии в промптах
│ │ ├── ai.controller.ts # /estimate, /generate-specification, /specification-history/*
│ │ └── dto/
│ └── ...
└── frontend/ # React приложение
├── src/
│ ├── components/
│ │ ├── AuthProvider/ # Keycloak авторизация ✅
│ │ ├── LoginPage/ # Страница логина ✅
│ │ ├── IdeasTable/
│ │ │ ├── IdeasTable.tsx # Таблица с DndContext
│ │ │ ├── DraggableRow.tsx # Сортируемая строка (useSortable)
│ │ │ ├── columns.tsx # Колонки + drag handle
│ │ │ └── ...
│ │ ├── IdeasFilters/ # Фильтры
│ │ ├── CreateIdeaModal/ # Модалка создания
│ │ ├── TeamPage/ # Страница команды (Фаза 2)
│ │ │ ├── TeamPage.tsx # Табы: Участники / Роли
│ │ │ ├── TeamMemberModal.tsx # Модалка участника
│ │ │ └── RolesManager.tsx # Управление ролями
│ │ ├── CommentsPanel/ # Комментарии к идеям
│ │ ├── AiEstimateModal/ # Модалка AI-оценки (Фаза 3) ✅
│ │ └── SpecificationModal/ # Модалка мини-ТЗ (Фаза 3.1) ✅
│ ├── hooks/
│ │ ├── 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 комментариев
│ │ └── ai.ts # AI Proxy API (Фаза 3 + 3.1) ✅
│ ├── store/
│ │ └── ideas.ts # Zustand store
│ └── types/
│ └── idea.ts # TypeScript типы
└── ...
Ключевые решения
| Решение | Выбор | Причина |
|---|---|---|
| ORM | TypeORM | Указано в требованиях |
| State Management | Zustand | Простота, минимальный boilerplate |
| UI Library | MUI | Богатый набор компонентов |
| Таблица | TanStack Table | Гибкость, виртуализация |
| Drag & Drop | dnd-kit | Современный, хорошая поддержка |
| Data Fetching | React Query | Кэширование, оптимистичные обновления |
| Язык интерфейса | Русский | Требование проекта |
| Авторизация | Keycloak | Внешний IdP, OIDC, редиректы |
| Keycloak Theme | Custom FreeMarker | Единый стиль с приложением (MUI) |
| E2E тесты | Playwright | Быстрее Selenium, лучше API, auto-wait |
| CI/CD | Drone CI | Kubernetes pipeline, автодеплой |
Блокеры / Проблемы
Пока нет
Заметки
- Интерфейс на русском языке — все тексты, лейблы, 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, clientteam-planner-frontend - Keycloak Theme: Кастомная тема
team-plannerв стиле MUI, образregistry.vigdorov.ru/library/keycloak-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: Промпты для генерации ТЗ и оценки трудозатрат теперь включают комментарии к идее для лучшей точности