# План разработки 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] Добавить валидацию
- [ ] Написать тесты

### 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 (изменение порядка)
- [ ] Модуль Comments
  - [ ] Сущность Comment
  - [ ] GET /api/ideas/:id/comments
  - [ ] POST /api/ideas/:id/comments
  - [ ] DELETE /api/comments/:id
- [ ] Модуль Team
  - [ ] Сущность TeamMember
  - [ ] CRUD endpoints
  - [ ] GET /api/team/summary

### Frontend — Drag & Drop ✅
- [x] Интегрировать dnd-kit в таблицу
- [x] Drag handle в первой колонке
- [x] Визуальная индикация при перетаскивании (DragOverlay)
- [x] Сохранение порядка на сервер (оптимистичные обновления)
- [x] Сортировка по order по умолчанию

### Frontend — Цветовая маркировка
- [ ] Добавить поле color в таблицу
- [ ] Цветовой фон строки
- [ ] Picker для выбора цвета
- [ ] Фильтр по цвету

### Frontend — Комментарии
- [ ] Раскрывающаяся панель под строкой
- [ ] Список комментариев с тредами
- [ ] Форма добавления комментария
- [ ] Ответы на комментарии

### Frontend — Управление командой
- [ ] Страница /team
- [ ] Сводка по ролям
- [ ] Таблица участников
- [ ] Модалка добавления/редактирования
- [ ] Матрица производительности (время на задачи по сложности)

---

## Фаза 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. **Тестирование** — покрываем критичный функционал
4. **Документирование** — обновляем CONTEXT.md после значимых изменений
