Files
team-planner/CONTEXT.md
vigdorov 2953a97a46
All checks were successful
continuous-integration/drone/push Build is passing
fix tests
2026-01-14 01:20:27 +03:00

152 lines
9.3 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
> Этот файл обновляется агентами для передачи контекста. **Обновляй его после каждой значимой работы!**
---
## Текущий статус
**Этап:** Фаза 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)