# Контекст проекта Team Planner

> Этот файл обновляется агентами для передачи контекста. **Обновляй его после каждой значимой работы!**

---

## Текущий статус

**Этап:** Фаза 2 — Drag & Drop ✅, Авторизация ✅, далее цвета/комментарии/команда
**Фаза MVP:** Базовый функционал + авторизация готовы
**Последнее обновление:** 2026-01-14

---

## Что сделано

| Дата | Что сделано |
|------|-------------|
| 2025-12-29 | Созданы REQUIREMENTS.md, CLAUDE.md, CONTEXT.md |
| 2025-12-29 | Создан ARCHITECTURE.md (C4, sequences, API, UI prototypes, спецификация) |
| 2025-12-29 | Создан ROADMAP.md — план разработки по фазам |
| 2025-12-29 | Создан DEVELOPMENT.md — правила локальной разработки |
| 2025-12-29 | **Фаза 0:** docker-compose.yml для PostgreSQL |
| 2025-12-29 | **Фаза 0:** Backend (NestJS + TypeORM + PostgreSQL + class-validator) |
| 2025-12-29 | **Фаза 0:** Frontend (Vite + React + MUI + Zustand + TanStack + dnd-kit) |
| 2025-12-29 | **Фаза 1:** Backend Ideas module (entity, DTO, service, controller) |
| 2025-12-29 | **Фаза 1:** Frontend — API сервис (services/ideas.ts) |
| 2025-12-29 | **Фаза 1:** Frontend — Zustand store для фильтров и пагинации |
| 2025-12-29 | **Фаза 1:** Frontend — React Query хуки (useIdeas.ts) |
| 2025-12-29 | **Фаза 1:** Frontend — IdeasTable с TanStack Table |
| 2025-12-29 | **Фаза 1:** Frontend — Фильтры (статус, приоритет, модуль, поиск) |
| 2025-12-29 | **Фаза 1:** Frontend — Inline-редактирование ячеек (double-click) |
| 2025-12-29 | **Фаза 1:** Frontend — Модалка создания идеи |
| 2025-12-29 | **Фаза 1:** Frontend — Skeleton loader и empty state |
| 2025-12-29 | **Фаза 1:** Frontend — Удаление идей |
| 2025-12-31 | Исправлен баг: Select в inline-редактировании закрывался при клике (MenuProps.disablePortal) |
| 2025-12-31 | Локализация интерфейса на русский язык |
| 2026-01-13 | **Фаза 2:** Backend — PATCH /api/ideas/reorder endpoint (ReorderIdeasDto, транзакция) |
| 2026-01-13 | **Фаза 2:** Frontend — Drag & Drop с dnd-kit (DraggableRow, drag handle) |
| 2026-01-13 | **Фаза 2:** Исправлены баги D&D: setNodeRef, сортировка по order, оптимистичные обновления, DragOverlay |
| 2026-01-13 | Добавлены Selenium E2E тесты (tests/e2e/) — Фаза 1 ✅, Фаза 2 частично |
| 2026-01-13 | **Авторизация:** Backend Auth модуль (JWT + Keycloak JWKS) |
| 2026-01-13 | **Авторизация:** Frontend AuthProvider (keycloak-js, auto token refresh) |
| 2026-01-14 | E2E тесты переписаны с Selenium на Playwright (tests/e2e/*.spec.ts) |
| 2026-01-14 | **Фаза 2:** Улучшен Drag & Drop — добавлен @dnd-kit/modifiers, исправлен race condition с drag handle, restrictToVerticalAxis |
| 2026-01-14 | **Production:** Настроен Keycloak для production (team-planner.vigdorov.ru), обновлён Dockerfile с Keycloak переменными |
| 2026-01-14 | **UI:** Страница логина (LoginPage) — кнопка "Войти", описание приложения, контакт для получения доступа |
| 2026-01-14 | **UI:** Кнопка выхода на главной странице (IconButton с Logout) |

---

## Текущая задача

> Смотри [ROADMAP.md](ROADMAP.md) для полного плана разработки

**Сейчас:** Фаза 2 — цветовая маркировка, комментарии, управление командой

---

## Файловая структура

```
team-planner/
├── CLAUDE.md           # Точка входа для агентов
├── DEVELOPMENT.md      # Правила локальной разработки
├── CONTEXT.md          # Этот файл — текущий контекст
├── REQUIREMENTS.md     # Требования к продукту
├── ARCHITECTURE.md     # Архитектура, API, UI
├── ROADMAP.md          # План разработки
├── docker-compose.yml  # PostgreSQL и сервисы
├── tests/
│   ├── package.json        # Зависимости для тестов
│   ├── playwright.config.ts # Конфигурация Playwright
│   └── e2e/                # Playwright E2E тесты
│       ├── auth.setup.ts   # Авторизация для тестов (Keycloak)
│       ├── phase1.spec.ts  # Тесты Фазы 1 (11 тестов)
│       └── phase2.spec.ts  # Тесты Фазы 2 (D&D, цвета, комментарии, команда)
├── backend/            # NestJS API
│   ├── src/
│   │   ├── auth/       # Модуль авторизации ✅
│   │   │   ├── jwt.strategy.ts           # JWT валидация через JWKS
│   │   │   ├── jwt-auth.guard.ts         # Глобальный guard
│   │   │   └── decorators/public.decorator.ts  # @Public() для открытых endpoints
│   │   ├── ideas/      # Модуль идей (готов + reorder)
│   │   │   ├── dto/
│   │   │   │   └── reorder-ideas.dto.ts  # DTO для изменения порядка
│   │   │   ├── ideas.controller.ts       # PATCH /ideas/reorder
│   │   │   └── ideas.service.ts          # reorder() с транзакцией
│   │   ├── team/       # Модуль команды (Фаза 2)
│   │   ├── comments/   # Модуль комментариев (Фаза 2)
│   │   └── ai/         # AI-оценка (Фаза 3)
│   └── ...
└── frontend/           # React приложение
    ├── src/
    │   ├── components/
    │   │   ├── AuthProvider/    # Keycloak авторизация ✅
    │   │   ├── LoginPage/       # Страница логина ✅
    │   │   ├── IdeasTable/
    │   │   │   ├── IdeasTable.tsx      # Таблица с DndContext
    │   │   │   ├── DraggableRow.tsx    # Сортируемая строка (useSortable)
    │   │   │   ├── columns.tsx         # Колонки + drag handle
    │   │   │   └── ...
    │   │   ├── IdeasFilters/    # Фильтры
    │   │   └── CreateIdeaModal/ # Модалка создания
    │   ├── hooks/
    │   │   └── useIdeas.ts      # React Query хуки + useReorderIdeas
    │   ├── services/
    │   │   ├── api.ts           # Axios + auth interceptors
    │   │   ├── keycloak.ts      # Keycloak instance ✅
    │   │   └── ideas.ts         # API методы + reorder()
    │   ├── store/
    │   │   └── ideas.ts         # Zustand store
    │   └── types/
    │       └── idea.ts          # TypeScript типы
    └── ...
```

---

## Ключевые решения

| Решение | Выбор | Причина |
|---------|-------|---------|
| ORM | TypeORM | Указано в требованиях |
| State Management | Zustand | Простота, минимальный boilerplate |
| UI Library | MUI | Богатый набор компонентов |
| Таблица | TanStack Table | Гибкость, виртуализация |
| Drag & Drop | dnd-kit | Современный, хорошая поддержка |
| Data Fetching | React Query | Кэширование, оптимистичные обновления |
| Язык интерфейса | Русский | Требование проекта |
| Авторизация | Keycloak | Внешний IdP, OIDC, редиректы |
| E2E тесты | Playwright | Быстрее Selenium, лучше API, auto-wait |

---

## Блокеры / Проблемы

*Пока нет*

---

## Заметки

- **Интерфейс на русском языке** — все тексты, лейблы, placeholder'ы должны быть на русском
- AI-интеграция через ai-proxy: `/Users/vigdorov/dev/gptunnel-service/INTEGRATION.md`
- Многопользовательский режим НЕ нужен
- Экспорт и интеграции НЕ нужны
- Warning о React Compiler и TanStack Table можно игнорировать
- **Drag & Drop:** dnd-kit с useSortable + @dnd-kit/modifiers (restrictToVerticalAxis), DragHandle через React Context, CSS.Translate для совместимости с таблицами, reorder через транзакцию
- **Keycloak:** auth.vigdorov.ru, realm `team-planner`, client `team-planner-frontend`
- **Production URL:** https://team-planner.vigdorov.ru (добавлен в Valid redirect URIs и Web origins клиента Keycloak)
