200 lines
8.0 KiB
Markdown
200 lines
8.0 KiB
Markdown
# План разработки 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 после значимых изменений
|