Files
team-planner/CONTEXT.md
vigdorov 684e416588
All checks were successful
continuous-integration/drone/push Build is passing
add view any columns and view mode for ideas
2026-01-15 11:41:01 +03:00

20 KiB
Raw Blame History

Контекст проекта Team Planner

Этот файл обновляется агентами для передачи контекста. Обновляй его после каждой значимой работы!


Текущий статус

Этап: Фаза 3.1 завершена | Фаза 3.2 запланирована 📋 Фаза MVP: Базовый функционал + авторизация + расширенный функционал + AI-оценка + мини-ТЗ + история ТЗ готовы Следующий этап: Фаза 3.2 — Полный просмотр идеи (все поля) Последнее обновление: 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
2026-01-15 Планирование: Добавлена Фаза 3.2 — Полный просмотр идеи (все поля доступны для просмотра и редактирования)

Текущая задача

Смотри ROADMAP.md для полного плана разработки

Готово: Фазы 0-3.1 завершены Следующий шаг: Фаза 3.2 — Полный просмотр идеи 📋

Фаза 3.2: Полный просмотр идеи

Колонки в таблице:

  • Колонки pain, aiRole, verificationMethod
  • Column visibility (скрытие/показ колонок, localStorage)

Модалка IdeaDetailModal:

  • Режим просмотра (readonly по умолчанию)
  • Режим редактирования (кнопка "Редактировать")
  • Кнопки "Сохранить" / "Отмена"
  • Быстрый доступ к ТЗ и AI-оценке

E2E тесты:

  • Column visibility, модалка, редактирование, сохранение

Новые требования (Фазы 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, client team-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: Промпты для генерации ТЗ и оценки трудозатрат теперь включают комментарии к идее для лучшей точности