# План разработки Team Planner > **Это основной источник истины для всех планов по проекту.** > Обновляй этот файл при изменении планов или завершении задач. --- ## Обзор фаз | Фаза | Название | Статус | Описание | |------|----------|--------|----------| | 0 | Инициализация | ✅ Завершена | Настройка проектов, инфраструктура | | 1 | Базовый функционал | ✅ Завершена | CRUD идей, таблица, редактирование | | 1.5 | Авторизация | ✅ Завершена | Keycloak, JWT, защита API | | 2 | Расширенный функционал | ✅ Завершена | Drag&Drop, цвета, комментарии, команда | | 3 | AI-интеграция | ⏸️ Ожидает | Оценка времени, рекомендации | --- ## Фаза 0: Инициализация ✅ ### Backend - [x] Создать NestJS проект (`nest new backend`) - [x] Настроить TypeORM + PostgreSQL - [x] Создать docker-compose для PostgreSQL - [x] Настроить базовую структуру модулей - [x] Добавить глобальную валидацию (class-validator) - [x] Настроить CORS ### Frontend - [x] Создать React проект (Vite + TypeScript) - [x] Установить и настроить MUI - [x] Установить Zustand - [x] Установить TanStack Table - [x] Установить dnd-kit - [x] Настроить Axios + React Query - [x] Создать базовую структуру папок ### Инфраструктура - [x] Создать общий docker-compose - [ ] Настроить ESLint + Prettier для обоих проектов --- ## Фаза 1: Базовый функционал ✅ ### Backend — Модуль Ideas - [x] Создать сущность Idea (entity) - [x] Создать DTO (CreateIdeaDto, UpdateIdeaDto, QueryIdeasDto) - [x] Реализовать IdeasService - [x] Реализовать IdeasController - [x] GET /api/ideas (с пагинацией, фильтрами, сортировкой) - [x] POST /api/ideas - [x] PATCH /api/ideas/:id - [x] DELETE /api/ideas/:id - [x] Добавить валидацию - [x] E2E тесты (Playwright) ### Frontend — Таблица идей - [x] Создать типы (types/idea.ts) - [x] Создать API-сервис (services/ideas.ts) - [x] Создать Zustand store (store/ideas.ts) - [x] Создать компонент IdeasTable - [x] Отображение колонок - [x] Пагинация - [x] Сортировка (клик по заголовку) - [x] Создать компоненты фильтров - [x] Фильтр по статусу - [x] Фильтр по приоритету - [x] Фильтр по модулю - [x] Текстовый поиск - [x] Inline-редактирование ячеек - [x] Double-click для редактирования - [x] Автосохранение при blur/Enter - [x] Оптимистичные обновления - [x] Создать модалку создания идеи - [x] Добавить skeleton loader - [x] Добавить empty state - [x] Удаление идей - [x] Локализация интерфейса на русский язык --- ## Фаза 1.5: Авторизация ✅ > **Keycloak интеграция для защиты приложения** ### Настройка Keycloak (auth.vigdorov.ru) - [x] Создать realm `team-planner` - [x] Создать client `team-planner-frontend` (public, PKCE) - [x] Настроить Valid Redirect URIs - [x] Создать тестового пользователя ### Backend — Auth модуль - [x] Установить passport, passport-jwt, jwks-rsa - [x] Создать JwtStrategy (валидация через JWKS) - [x] Создать JwtAuthGuard (глобальный guard) - [x] Создать @Public() декоратор - [x] Добавить env переменные (KEYCLOAK_REALM_URL) - [x] Защитить все endpoints (кроме /health) ### Frontend — AuthProvider - [x] Установить keycloak-js - [x] Создать keycloak.ts сервис - [x] Создать AuthProvider компонент - [x] onLoad: 'login-required' - [x] PKCE (S256) - [x] Автообновление токена - [x] Добавить interceptors в api.ts - [x] Authorization header - [x] Обработка 401 - [x] Обернуть App в AuthProvider --- ## Фаза 2: Расширенный функционал ✅ ### Backend — Дополнения - [x] PATCH /api/ideas/reorder (изменение порядка) - [x] Модуль Comments - [x] Сущность Comment - [x] GET /api/ideas/:id/comments - [x] POST /api/ideas/:id/comments - [x] DELETE /api/comments/:id - [x] Модуль Team - [x] Сущность TeamMember - [x] CRUD endpoints - [x] GET /api/team/summary ### Frontend — Drag & Drop ✅ - [x] Интегрировать dnd-kit в таблицу - [x] Drag handle в первой колонке - [x] Визуальная индикация при перетаскивании (DragOverlay) - [x] Сохранение порядка на сервер (оптимистичные обновления) - [x] Сортировка по order по умолчанию ### Frontend — Цветовая маркировка ✅ - [x] Добавить поле color в таблицу - [x] Цветовой фон строки - [x] Picker для выбора цвета - [x] Фильтр по цвету ### Frontend — Комментарии ✅ - [x] Раскрывающаяся панель под строкой - [x] Список комментариев - [x] Форма добавления комментария - [x] Удаление комментариев ### Frontend — Управление командой ✅ - [x] Страница /team (табы навигации) - [x] Сводка по ролям - [x] Таблица участников - [x] Модалка добавления/редактирования - [x] Матрица производительности (время на задачи по сложности) ### E2E тестирование ✅ - [x] Playwright тесты для Фазы 1 (17 тестов) - [x] Playwright тесты для Фазы 2 (37 тестов) - [x] data-testid во всех компонентах - [x] Гайд E2E_TESTING.md --- ## Фаза 3: AI-интеграция ⏸️ ### Backend — Модуль AI - [ ] Интегрировать ai-proxy service - [ ] POST /api/ai/estimate - [ ] Получить идею и состав команды - [ ] Сформировать промпт - [ ] Отправить запрос в AI - [ ] Распарсить ответ - [ ] Сохранить оценку - [ ] Rate limiting для AI-запросов ### Frontend — AI-оценка - [ ] Кнопка "Оценить AI" в строке/детали идеи - [ ] Модалка с результатом оценки - [ ] Общее время - [ ] Сложность - [ ] Разбивка по ролям - [ ] Рекомендации - [ ] Отображение оценки в таблице - [ ] Loading state для AI-запросов --- ## Backlog (после MVP) - [ ] WebSocket для real-time обновлений - [ ] Виртуализация списка (1000+ идей) - [ ] Keyboard shortcuts - [ ] Сохранение пресетов фильтров - [ ] Темная тема --- ## Принципы разработки 1. **Вертикальная разработка** — делаем полный flow (BE → FE) для каждой фичи 2. **Инкрементальность** — сначала базовое, потом улучшаем 3. **Тестирование** — покрываем критичный функционал E2E тестами (см. [E2E_TESTING.md](E2E_TESTING.md)) 4. **Документирование** — обновляем CONTEXT.md после значимых изменений 5. **data-testid** — все новые компоненты сразу получают data-testid для тестов