Files
team-planner/ROADMAP.md
2026-01-15 00:18:35 +03:00

205 lines
8.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# План разработки 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 для тестов