This commit is contained in:
2026-01-14 01:10:01 +03:00
parent 24c5581d7b
commit 2ce092aa59
40 changed files with 2001 additions and 297 deletions

View File

@ -9,79 +9,116 @@
| Фаза | Название | Статус | Описание |
|------|----------|--------|----------|
| 0 | Инициализация | В процессе | Настройка проектов, инфраструктура |
| 1 | Базовый функционал | ⏸️ Ожидает | CRUD идей, таблица, редактирование |
| 2 | Расширенный функционал | ⏸️ Ожидает | Drag&Drop, цвета, комментарии, команда |
| 0 | Инициализация | ✅ Завершена | Настройка проектов, инфраструктура |
| 1 | Базовый функционал | ✅ Завершена | CRUD идей, таблица, редактирование |
| 1.5 | Авторизация | ✅ Завершена | Keycloak, JWT, защита API |
| 2 | Расширенный функционал | 🔄 В процессе | Drag&Drop ✅, цвета, комментарии, команда |
| 3 | AI-интеграция | ⏸️ Ожидает | Оценка времени, рекомендации |
---
## Фаза 0: Инициализация
## Фаза 0: Инициализация
### Backend
- [ ] Создать NestJS проект (`nest new backend`)
- [ ] Настроить TypeORM + PostgreSQL
- [ ] Создать docker-compose для PostgreSQL
- [ ] Настроить базовую структуру модулей
- [ ] Добавить глобальную валидацию (class-validator)
- [ ] Настроить CORS
- [x] Создать NestJS проект (`nest new backend`)
- [x] Настроить TypeORM + PostgreSQL
- [x] Создать docker-compose для PostgreSQL
- [x] Настроить базовую структуру модулей
- [x] Добавить глобальную валидацию (class-validator)
- [x] Настроить CORS
### Frontend
- [ ] Создать React проект (Vite + TypeScript)
- [ ] Установить и настроить MUI
- [ ] Установить Zustand
- [ ] Установить TanStack Table
- [ ] Установить dnd-kit
- [ ] Настроить Axios + React Query
- [ ] Создать базовую структуру папок
- [x] Создать React проект (Vite + TypeScript)
- [x] Установить и настроить MUI
- [x] Установить Zustand
- [x] Установить TanStack Table
- [x] Установить dnd-kit
- [x] Настроить Axios + React Query
- [x] Создать базовую структуру папок
### Инфраструктура
- [x] Создать общий docker-compose
- [ ] Настроить ESLint + Prettier для обоих проектов
- [ ] Создать общий docker-compose
---
## Фаза 1: Базовый функционал
## Фаза 1: Базовый функционал
### Backend — Модуль Ideas
- [ ] Создать сущность Idea (entity)
- [ ] Создать DTO (CreateIdeaDto, UpdateIdeaDto, QueryIdeasDto)
- [ ] Реализовать IdeasService
- [ ] Реализовать IdeasController
- [ ] GET /api/ideas (с пагинацией, фильтрами, сортировкой)
- [ ] POST /api/ideas
- [ ] PATCH /api/ideas/:id
- [ ] DELETE /api/ideas/:id
- [ ] Добавить валидацию
- [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 — Таблица идей
- [ ] Создать типы (types/idea.ts)
- [ ] Создать API-сервис (services/ideas.ts)
- [ ] Создать Zustand store (store/ideas.ts)
- [ ] Создать компонент IdeasTable
- [ ] Отображение колонок
- [ ] Пагинация
- [ ] Сортировка (клик по заголовку)
- [ ] Создать компоненты фильтров
- [ ] Фильтр по статусу
- [ ] Фильтр по приоритету
- [ ] Фильтр по модулю
- [ ] Текстовый поиск
- [ ] Inline-редактирование ячеек
- [ ] Double-click для редактирования
- [ ] Автосохранение при blur/Enter
- [ ] Оптимистичные обновления
- [ ] Создать модалку создания идеи
- [ ] Добавить skeleton loader
- [ ] Добавить empty state
- [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] Локализация интерфейса на русский язык
---
## Фаза 2: Расширенный функционал
## Фаза 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 — Дополнения
- [ ] PATCH /api/ideas/reorder (изменение порядка)
- [x] PATCH /api/ideas/reorder (изменение порядка)
- [ ] Модуль Comments
- [ ] Сущность Comment
- [ ] GET /api/ideas/:id/comments
@ -92,11 +129,12 @@
- [ ] CRUD endpoints
- [ ] GET /api/team/summary
### Frontend — Drag & Drop
- [ ] Интегрировать dnd-kit в таблицу
- [ ] Drag handle в первой колонке
- [ ] Визуальная индикация при перетаскивании
- [ ] Сохранение порядка на сервер
### Frontend — Drag & Drop
- [x] Интегрировать dnd-kit в таблицу
- [x] Drag handle в первой колонке
- [x] Визуальная индикация при перетаскивании (DragOverlay)
- [x] Сохранение порядка на сервер (оптимистичные обновления)
- [x] Сортировка по order по умолчанию
### Frontend — Цветовая маркировка
- [ ] Добавить поле color в таблицу
@ -119,7 +157,7 @@
---
## Фаза 3: AI-интеграция
## Фаза 3: AI-интеграция ⏸️
### Backend — Модуль AI
- [ ] Интегрировать ai-proxy service