add auth
This commit is contained in:
148
ROADMAP.md
148
ROADMAP.md
@ -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
|
||||
|
||||
Reference in New Issue
Block a user