# Контекст проекта Team Planner > Этот файл обновляется агентами для передачи контекста. **Обновляй его после каждой значимой работы!** --- ## Текущий статус **Этап:** Фаза 2 — Drag & Drop ✅, Авторизация ✅, далее цвета/комментарии/команда **Фаза MVP:** Базовый функционал + авторизация готовы **Последнее обновление:** 2026-01-14 --- ## Что сделано | Дата | Что сделано | |------|-------------| | 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 переменными | --- ## Текущая задача > Смотри [ROADMAP.md](ROADMAP.md) для полного плана разработки **Сейчас:** Фаза 2 — цветовая маркировка, комментарии, управление командой --- ## Файловая структура ``` team-planner/ ├── CLAUDE.md # Точка входа для агентов ├── DEVELOPMENT.md # Правила локальной разработки ├── CONTEXT.md # Этот файл — текущий контекст ├── REQUIREMENTS.md # Требования к продукту ├── ARCHITECTURE.md # Архитектура, API, UI ├── ROADMAP.md # План разработки ├── docker-compose.yml # PostgreSQL и сервисы ├── tests/ │ ├── package.json # Зависимости для тестов │ ├── playwright.config.ts # Конфигурация Playwright │ └── e2e/ # Playwright E2E тесты │ ├── auth.setup.ts # Авторизация для тестов (Keycloak) │ ├── phase1.spec.ts # Тесты Фазы 1 (11 тестов) │ └── phase2.spec.ts # Тесты Фазы 2 (D&D, цвета, комментарии, команда) ├── backend/ # NestJS API │ ├── src/ │ │ ├── auth/ # Модуль авторизации ✅ │ │ │ ├── jwt.strategy.ts # JWT валидация через JWKS │ │ │ ├── jwt-auth.guard.ts # Глобальный guard │ │ │ └── decorators/public.decorator.ts # @Public() для открытых endpoints │ │ ├── ideas/ # Модуль идей (готов + reorder) │ │ │ ├── dto/ │ │ │ │ └── reorder-ideas.dto.ts # DTO для изменения порядка │ │ │ ├── ideas.controller.ts # PATCH /ideas/reorder │ │ │ └── ideas.service.ts # reorder() с транзакцией │ │ ├── team/ # Модуль команды (Фаза 2) │ │ ├── comments/ # Модуль комментариев (Фаза 2) │ │ └── ai/ # AI-оценка (Фаза 3) │ └── ... └── frontend/ # React приложение ├── src/ │ ├── components/ │ │ ├── AuthProvider/ # Keycloak авторизация ✅ │ │ ├── IdeasTable/ │ │ │ ├── IdeasTable.tsx # Таблица с DndContext │ │ │ ├── DraggableRow.tsx # Сортируемая строка (useSortable) │ │ │ ├── columns.tsx # Колонки + drag handle │ │ │ └── ... │ │ ├── IdeasFilters/ # Фильтры │ │ └── CreateIdeaModal/ # Модалка создания │ ├── hooks/ │ │ └── useIdeas.ts # React Query хуки + useReorderIdeas │ ├── services/ │ │ ├── api.ts # Axios + auth interceptors │ │ ├── keycloak.ts # Keycloak instance ✅ │ │ └── ideas.ts # API методы + reorder() │ ├── 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, редиректы | | E2E тесты | Playwright | Быстрее Selenium, лучше API, auto-wait | --- ## Блокеры / Проблемы *Пока нет* --- ## Заметки - **Интерфейс на русском языке** — все тексты, лейблы, placeholder'ы должны быть на русском - AI-интеграция через ai-proxy: `/Users/vigdorov/dev/gptunnel-service/INTEGRATION.md` - Многопользовательский режим НЕ нужен - Экспорт и интеграции НЕ нужны - 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` - **Production URL:** https://team-planner.vigdorov.ru (добавлен в Valid redirect URIs и Web origins клиента Keycloak)