Files
sfera-new/2025-09-18/USEAUTH_TO_AUTHCONTEXT_MIGRATION_PLAN.md
Veronika Smirnova 24a6ff74b5 feat: migrate from useAuth to AuthContext for centralized auth state
• Полная миграция 64 компонентов с useAuth на AuthContext
• Исправлена race condition в SMS регистрации
• Улучшена SSR совместимость с таймаутами
• Удалена дублирующая система регистрации
• Обновлена документация архитектуры аутентификации

Технические изменения:
- AuthContext.tsx: централизованная система состояния
- auth-flow.tsx: убрана агрессивная логика logout
- confirmation-step.tsx: исправлена передача телефона
- page.tsx: добавлена синхронизация состояния
- 64 файла: миграция useAuth → useAuthContext

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-19 17:21:52 +03:00

907 lines
34 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.

# 🚨 ПЛАН БЕЗОПАСНОЙ МИГРАЦИИ: useAuth → AuthContext
**Проект:** SFERA
**Дата:** 18.09.2025
**Критичность:** ВЫСОКАЯ
**Статус:** ЭКСТРЕННАЯ МИГРАЦИЯ
---
## 📊 ТЕКУЩАЯ СИТУАЦИЯ
### ✅ МИГРИРОВАНО (8 компонентов):
- `/src/components/layout/app-shell.tsx`
- `/src/components/dashboard/sidebar/index.tsx`
- `/src/components/dashboard/sidebar/SellerSidebar.tsx`
- `/src/components/dashboard/sidebar/FulfillmentSidebar.tsx`
- `/src/components/dashboard/sidebar/LogistSidebar.tsx`
- `/src/components/dashboard/sidebar/WholesaleSidebar.tsx`
- `/src/components/auth-guard.tsx`
- `/src/components/seller-statistics/seller-statistics-dashboard.tsx`
### ❌ ТРЕБУЕТ МИГРАЦИИ (56 компонентов):
**🔴 КРИТИЧЕСКИЕ УГРОЗЫ:** 8 компонентов
**⚠️ ВЫСОКИЙ РИСК:** 15 компонентов
**📋 СРЕДНИЙ РИСК:** 20 компонентов
**🟢 НИЗКИЙ РИСК:** 13 компонентов
---
## 🚨 КРИТИЧЕСКИЕ УЯЗВИМОСТИ
### 1. **SECURITY HOLE** - Обход авторизации ролей
**Компонент:** `useRoleGuard.ts` (используется на 49 страницах)
**Проблема:** Селлеры могут получить доступ к данным фулфилмента
**Бизнес-риск:** Нарушение конфиденциальности клиентских данных
### 2. **INFINITE LOOPS** - Бесконечные циклы регистрации
**Компонент:** `auth-flow.tsx`
**Проблема:** `window.location.reload()` при рассинхроне состояний
**Бизнес-риск:** Потеря новых клиентов, невозможность регистрации
### 3. **PROFILE CORRUPTION** - Коррупция пользовательских данных
**Компонент:** `user-settings.tsx`
**Проблема:** Обновления не отражаются в интерфейсе
**Бизнес-риск:** Пользователи думают что система не работает
---
## 🛡️ СТРАТЕГИЯ БЕЗОПАСНОЙ МИГРАЦИИ
### 🎯 ПРИНЦИПЫ:
1. **Rollback First** - каждое изменение должно иметь план отката
2. **Test Everything** - тестирование на каждом этапе
3. **Monitor Always** - мониторинг состояния на каждом шаге
4. **Backup Critical** - резервные копии критических компонентов
5. **Incremental Progress** - поэтапная миграция с проверками
### 📋 CHECKPOINT SYSTEM:
- **Checkpoint Alpha** - после каждого критического компонента
- **Checkpoint Beta** - после группы высокого риска
- **Checkpoint Gamma** - после средней группы
- **Checkpoint Final** - полное тестирование
---
## 🔥 ФАЗА 1: ЭКСТРЕННАЯ МИГРАЦИЯ (24 часа)
### ⚡ ЭТАП 1.1: КРИТИЧЕСКИЕ ИСПРАВЛЕНИЯ (2 часа)
#### 🎯 **ЦЕЛЬ:** Устранить security hole и routing issues
**1.1.1 useRoleGuard.ts** - КРИТИЧНО (15 минут)
```bash
# Backup
cp src/hooks/useRoleGuard.ts src/hooks/useRoleGuard.ts.backup
# Rollback plan
git stash push -m "useRoleGuard migration rollback point"
```
**Изменения:**
```typescript
// BEFORE
import { useAuth } from '@/hooks/useAuth'
const { user } = useAuth()
// AFTER
import { useAuthContext } from '@/contexts/AuthContext'
const { user } = useAuthContext()
```
**Тестирование:**
- [ ] Селлер не может зайти в /fulfillment/*
- [ ] Фулфилмент не может зайти в /seller/*
- [ ] Логист не может зайти в /wholesale/*
- [ ] Правильные редиректы на home страницы
**Rollback условия:** Если любой из тестов провален
---
**1.1.2 app/page.tsx** - КРИТИЧНО (10 минут)
**Изменения:**
```typescript
// BEFORE
import { useAuth } from '@/hooks/useAuth'
const { user } = useAuth()
// AFTER
import { useAuthContext } from '@/contexts/AuthContext'
const { user } = useAuthContext()
```
**Тестирование:**
- [ ] Неавторизованные пользователи видят landing
- [ ] Авторизованные перенаправляются в dashboard
- [ ] Нет infinite redirects
---
### ⚡ ЭТАП 1.2: АУТЕНТИФИКАЦИЯ (4 часа)
#### 🎯 **ЦЕЛЬ:** Исправить flow регистрации и SMS
**1.2.1 auth-flow.tsx** - КРИТИЧНО (45 минут)
**Backup и Rollback Plan:**
```bash
cp src/components/auth/auth-flow.tsx src/components/auth/auth-flow.tsx.backup
git stash push -m "auth-flow migration rollback point"
```
**Изменения:**
```typescript
// ОПАСНЫЙ КОД (УДАЛИТЬ):
if (isAuthenticated && user && !user.organization) {
localStorage.removeItem('authToken')
window.location.reload() // 🚨 CAUSES INFINITE LOOPS
}
// БЕЗОПАСНЫЙ КОД:
if (isAuthenticated && user && !user.organization) {
logout() // Use AuthContext logout method
}
```
**Детальная замена:**
```typescript
// BEFORE
import { useAuth } from '@/hooks/useAuth'
const { isAuthenticated, user } = useAuth()
// AFTER
import { useAuthContext } from '@/contexts/AuthContext'
const { isAuthenticated, user, logout } = useAuthContext()
```
**Критическое тестирование:**
- [ ] Новая регистрация работает без циклов
- [ ] Существующие пользователи без организации проходят регистрацию
- [ ] Полные пользователи перенаправляются в dashboard
- [ ] НЕТ `window.location.reload()` в консоли браузера
---
**1.2.2 sms-step.tsx** - ВЫСОКИЙ РИСК (30 минут)
**Изменения:**
```typescript
// BEFORE
import { useAuth } from '@/hooks/useAuth'
const { verifySmsCode } = useAuth()
// AFTER
import { useAuthContext } from '@/contexts/AuthContext'
const { verifySmsCode } = useAuthContext()
```
**Тестирование:**
- [ ] SMS коды работают для новых пользователей
- [ ] SMS коды работают для существующих пользователей
- [ ] Правильные редиректы после верификации
- [ ] Состояние пользователя синхронизировано
---
### 📋 CHECKPOINT ALPHA - КРИТИЧЕСКАЯ ПРОВЕРКА
**Обязательные тесты перед продолжением:**
1. **Безопасность ролей:**
```bash
# Тест: попытка доступа селлера к фулфилменту
curl -H "Authorization: Bearer SELLER_TOKEN" http://localhost:3000/fulfillment/dashboard
# Ожидаемый результат: 403 или редирект
```
2. **Регистрационный flow:**
- Регистрация нового селлера: ✅/❌
- Регистрация нового фулфилмента: ✅/❌
- SMS верификация: ✅/❌
- Завершение регистрации: ✅/❌
3. **Состояние системы:**
- Нет ошибок в консоли: ✅/❌
- Сайдбар синхронизирован: ✅/❌
- Роутинг работает: ✅/❌
**🛑 STOP CONDITIONS:**
Если любой из тестов провален → ROLLBACK всех изменений фазы 1
---
## 🔥 ФАЗА 2: ПРОФИЛИ И НАСТРОЙКИ (24-48 часов)
### 🎯 ЭТАП 2.1: ПОЛЬЗОВАТЕЛЬСКИЕ ДАННЫЕ
**2.1.1 user-settings.tsx** - СРЕДНИЙ РИСК (60 минут)
**Особенности миграции:**
- Компонент использует `updateUser` для мгновенного обновления sidebar
- Сложная логика сохранения профиля и организации
- API ключи должны синхронизироваться с AuthContext
**Детальный план:**
```typescript
// КРИТИЧЕСКАЯ ЗАМЕНА:
// BEFORE
const { user, updateUser } = useAuth()
// AFTER
const { user, updateUser } = useAuthContext()
```
**Тестирование:**
- [ ] Изменения профиля отражаются в sidebar немедленно
- [ ] API ключи сохраняются и отображаются
- [ ] Аватар обновляется корректно
- [ ] Организационные данные синхронизируются
---
**2.1.2 confirmation-step.tsx** - ВЫСОКАЯ СЛОЖНОСТЬ (120 минут)
**⚠️ СПЕЦИАЛЬНАЯ ОСТОРОЖНОСТЬ:**
Этот компонент содержит критическую бизнес-логику создания организаций с системой rollback.
**Анализ сложности:**
```typescript
// Три разных метода регистрации:
const {
registerFulfillmentOrganization, // Для фулфилмента/логистики/опта
registerSellerOrganization, // Для селлеров
registerOrganization // Новый универсальный
} = useAuth()
// A/B тестирование между методами (линии 50, 88-111)
// Rollback механизм в useAuth (восстановление состояния при ошибках)
```
**Пошаговая миграция:**
1. Проверить что все три метода есть в AuthContext ✅
2. Заменить импорт
3. Протестировать каждый тип организации отдельно
4. Проверить rollback механизм работает
**Критическое тестирование:**
- [ ] Фулфилмент регистрация с ИНН
- [ ] Селлер регистрация с API ключами
- [ ] Универсальная регистрация
- [ ] Rollback при ошибках сети
- [ ] Партнерские и реферальные коды
---
## 🔥 ФАЗА 3: БИЗНЕС-КОМПОНЕНТЫ (48-72 часа)
### 🎯 ЭТАП 3.1: ДАШБОРДЫ И СТАТИСТИКА
**Приоритетные компоненты:**
1. `dashboard-home.tsx` - главная страница всех ролей
2. `economics-page-wrapper.tsx` - экономические данные
3. `fulfillment-warehouse-dashboard/index.tsx` - управление складом
4. `supplier-orders-tabs-v2.tsx` - заказы поставщиков
**Стратегия миграции:**
- Один дашборд за раз
- Полное тестирование каждого типа пользователя
- Проверка доступа к данным
---
### 🎯 ЭТАП 3.2: КОММУНИКАЦИИ И СЕРВИСЫ
**Компоненты:**
1. `messenger-chat.tsx` - система сообщений
2. `file-uploader.tsx` - загрузка файлов
3. `voice-recorder.tsx` - голосовые записи
**Особенности:**
- Могут содержать user ID для авторизации запросов
- Низкий риск, но важны для UX
---
## 🔥 ФАЗА 4: ПОСТАВКИ И ЗАКАЗЫ (72-96 часов)
### 🎯 МАССОВАЯ МИГРАЦИЯ КОМПОНЕНТОВ ПОСТАВОК
**Категории:**
- **Создание поставок:** 8 компонентов
- **Управление поставками:** 12 компонентов
- **Отчеты и аналитика:** 6 компонентов
**Batching strategy:**
- Мигрируем по функциональным группам
- Тестируем весь workflow поставок сразу
---
## 🔥 ФАЗА 5: ДОЛГОСРОЧНЫЕ КОМПОНЕНТЫ (96+ часов)
### 🎯 ЭТАП 5.1: ДОМАШНИЕ СТРАНИЦЫ
- `seller-home-page.tsx`
- `fulfillment-home-page.tsx`
- `logist-home-page.tsx`
- `wholesale-home-page.tsx`
### 🎯 ЭТАП 5.2: СПЕЦИАЛИЗИРОВАННЫЕ КОМПОНЕНТЫ
- Advertising таблицы
- Warehouse управление
- Logistics заказы
---
## 🛡️ СИСТЕМА БЕЗОПАСНОСТИ И ROLLBACK
### 📋 ROLLBACK TRIGGERS
**Автоматический rollback при:**
- Ошибки аутентификации > 5% пользователей
- Невозможность входа в систему
- Критические ошибки в console (> 100/минуту)
- Жалобы пользователей на недоступность
### 🔄 ROLLBACK PROCEDURE
**Для каждой фазы:**
```bash
# 1. Остановить миграцию
git stash push -m "emergency_rollback_$(date)"
# 2. Вернуться к последнему стабильному состоянию
git checkout HEAD~1
# 3. Быстрый деплой
npm run build && npm start
# 4. Проверить работоспособность
curl -f http://localhost:3000/health || echo "ROLLBACK FAILED"
# 5. Уведомить команду
echo "ROLLBACK EXECUTED: $(date)" >> rollback.log
```
### 📊 МОНИТОРИНГ
**Метрики для отслеживания:**
- Успешные аутентификации (должно остаться > 95%)
- Время загрузки страниц (не должно увеличиться > 20%)
- Ошибки JavaScript в console (< 50/час)
- User registration completion rate (> 80%)
---
## 🧪 ОБЯЗАТЕЛЬНОЕ ТЕСТИРОВАНИЕ И ДИАГНОСТИКА ПОСЛЕ КАЖДОЙ ФАЗЫ
### 📋 ПРОТОКОЛ ТЕСТИРОВАНИЯ
**ПРАВИЛО:** После завершения каждой фазы проводится полная диагностика системы. Переход к следующей фазе ТОЛЬКО после успешного прохождения всех тестов.
### 🔴 CHECKPOINT ALPHA - ПОСЛЕ ФАЗЫ 1 (Критические исправления)
#### 🚨 ОБЯЗАТЕЛЬНЫЕ ТЕСТЫ БЕЗОПАСНОСТИ:
**1. Тест авторизации ролей (КРИТИЧЕСКИЙ):**
```bash
# Создаем тестовых пользователей каждой роли
node scripts/create-test-users.js
# Тестируем изоляцию ролей
curl -H "Authorization: Bearer SELLER_TOKEN" http://localhost:3000/fulfillment/dashboard
# Ожидаемо: 403 или редирект на /seller/dashboard
curl -H "Authorization: Bearer FULFILLMENT_TOKEN" http://localhost:3000/seller/statistics
# Ожидаемо: 403 или редирект на /fulfillment/dashboard
curl -H "Authorization: Bearer WHOLESALE_TOKEN" http://localhost:3000/logist/orders
# Ожидаемо: 403 или редирект на /wholesale/dashboard
```
**2. Тест регистрационного потока (КРИТИЧЕСКИЙ):**
```javascript
// Автоматизированный тест в browser console
async function testRegistrationFlow() {
const testResults = []
// Тест 1: Новая регистрация селлера
try {
await fetch('/api/graphql', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
query: `mutation { sendSmsCode(phone: "79999999999") { success message } }`
})
})
testResults.push('✅ SMS отправка работает')
} catch (e) {
testResults.push('❌ SMS отправка сломана: ' + e.message)
}
return testResults
}
```
**3. Диагностика состояния системы:**
```bash
# Проверка отсутствия window.location.reload() в auth-flow
grep -r "window.location.reload" src/components/auth/
# Ожидаемо: НЕТ результатов
# Проверка использования AuthContext
grep -r "useAuthContext" src/components/auth/ | wc -l
# Ожидаемо: > 3 (auth-flow, sms-step, confirmation-step)
# Проверка отсутствия useAuth в критических компонентах
grep -r "useAuth" src/hooks/useRoleGuard.ts src/app/page.tsx
# Ожидаемо: НЕТ результатов
```
#### 📊 МЕТРИКИ ПРОИЗВОДИТЕЛЬНОСТИ ПОСЛЕ ФАЗЫ 1:
```bash
# Время загрузки главной страницы
curl -w "@curl-format.txt" -o /dev/null -s http://localhost:3000/
# Количество ошибок JavaScript
# Мониторинг console.error за 5 минут, должно быть < 10
# Memory usage
node --inspect src/app/page.tsx
# Baseline для сравнения с последующими фазами
```
#### 🛑 STOP CONDITIONS ДЛЯ ФАЗЫ 1:
- Любой тест авторизации ролей провален → ROLLBACK
- Регистрация не работает → ROLLBACK
- > 50 JavaScript ошибок в час → ROLLBACK
- Infinite redirects обнаружены → ROLLBACK
---
### 🔴 CHECKPOINT BETA - ПОСЛЕ ФАЗЫ 2 (Профили и настройки)
#### 🧪 ТЕСТЫ ПОЛЬЗОВАТЕЛЬСКИХ ДАННЫХ:
**1. Тест синхронизации профиля:**
```javascript
// Тест обновления профиля и отражения в sidebar
async function testProfileSync() {
// 1. Открыть настройки пользователя
// 2. Изменить имя/аватар
// 3. Сохранить
// 4. Проверить что sidebar обновился МГНОВЕННО
// 5. Перезагрузить страницу
// 6. Проверить что изменения сохранились
const beforeName = document.querySelector('[data-testid="sidebar-user-name"]').textContent
// Симуляция изменения профиля
await updateProfile({ managerName: 'Test Name Updated' })
const afterName = document.querySelector('[data-testid="sidebar-user-name"]').textContent
return beforeName !== afterName ? '✅ Профиль синхронизирован' : '❌ Синхронизация сломана'
}
```
**2. Тест API ключей:**
```bash
# Добавление WB API ключа через настройки
# Проверка что ключ появился в статистике
curl -X POST http://localhost:3000/api/graphql \
-H "Authorization: Bearer USER_TOKEN" \
-d '{"query":"mutation { addMarketplaceApiKey(input: {marketplace: WILDBERRIES, apiKey: \"test_key\"}) { success } }"}'
# Проверка что ключ доступен в статистике
curl -X POST http://localhost:3000/api/graphql \
-H "Authorization: Bearer USER_TOKEN" \
-d '{"query":"query { getWildberriesStatistics(period: \"week\") { success message } }"}'
```
**3. Тест создания организаций:**
```javascript
// Тест всех трех методов регистрации
const testOrganizationCreation = async () => {
const results = []
// Тест универсального метода
try {
const result = await registerOrganization({
phone: '79999999998',
type: 'SELLER',
wbApiKey: 'test_key'
})
results.push(result.success ? '✅ Универсальная регистрация' : '❌ Универсальная регистрация')
} catch (e) {
results.push('❌ Универсальная регистрация: ' + e.message)
}
return results
}
```
#### 📊 ДИАГНОСТИКА СОСТОЯНИЯ ПОСЛЕ ФАЗЫ 2:
```bash
# Проверка количества мигрированных компонентов
grep -r "useAuthContext" src/ | grep -v "node_modules" | wc -l
# Ожидаемо: ~15-20 (базовые + профильные компоненты)
# Проверка оставшихся useAuth
grep -r "useAuth" src/ | grep -v "useAuthContext" | grep -v "node_modules" | wc -l
# Ожидаемо: ~40-45 (уменьшение на 10-15 компонентов)
# Memory leak detection
node --expose-gc --inspect index.js
# Проверка отсутствия утечек памяти от дублирующихся состояний
```
#### 🛑 STOP CONDITIONS ДЛЯ ФАЗЫ 2:
- Профиль не синхронизируется с sidebar → ROLLBACK
- API ключи не сохраняются → ROLLBACK
- Регистрация организаций сломана → ROLLBACK
- Memory leaks обнаружены → INVESTIGATE & FIX
---
### 🔴 CHECKPOINT GAMMA - ПОСЛЕ ФАЗЫ 3 (Бизнес-компоненты)
#### 🏢 ТЕСТЫ БИЗНЕС-ФУНКЦИЙ:
**1. Тест дашбордов всех ролей:**
```bash
# Создаем полный workflow тест
node tests/business-dashboard-test.js
# Тест доступа к экономическим данным
# Тест доступа к складским данным
# Тест доступа к заказам поставщиков
```
**2. Тест целостности данных:**
```javascript
// Проверка что все типы пользователей видят правильные данные
async function testDataIntegrity() {
const roles = ['SELLER', 'FULFILLMENT', 'LOGIST', 'WHOLESALE']
const results = []
for (const role of roles) {
const user = await loginAsRole(role)
const dashboardData = await fetchDashboardData()
// Проверяем что данные соответствуют роли
if (role === 'SELLER' && !dashboardData.wildberriesStats) {
results.push(`❌ ${role}: отсутствуют WB статистики`)
} else if (role === 'FULFILLMENT' && !dashboardData.warehouseData) {
results.push(`❌ ${role}: отсутствуют складские данные`)
} else {
results.push(`✅ ${role}: данные корректны`)
}
}
return results
}
```
#### 📊 ДИАГНОСТИКА ПРОИЗВОДИТЕЛЬНОСТИ ПОСЛЕ ФАЗЫ 3:
```bash
# Benchmark основных страниц
curl -w "@curl-format.txt" -o /dev/null -s http://localhost:3000/seller/dashboard
curl -w "@curl-format.txt" -o /dev/null -s http://localhost:3000/fulfillment/dashboard
curl -w "@curl-format.txt" -o /dev/null -s http://localhost:3000/warehouse/dashboard
# Ожидаемо: время загрузки < 2 секунд для каждой
# API requests count
# Мониторинг количества GET_ME запросов
# Ожидаемо: 1 запрос на сессию (вместо N на каждый компонент)
```
#### 🛑 STOP CONDITIONS ДЛЯ ФАЗЫ 3:
- Любой дашборд недоступен → ROLLBACK
- Данные отображаются неправильно → ROLLBACK
- Время загрузки > 3 секунд → INVESTIGATE & OPTIMIZE
- Critical business functions broken → IMMEDIATE ROLLBACK
---
### 🔴 CHECKPOINT DELTA - ПОСЛЕ ФАЗЫ 4 (Поставки и заказы)
#### 📦 ТЕСТЫ SUPPLY CHAIN:
**1. End-to-end тест поставок:**
```javascript
// Полный цикл: создание → управление → отчеты
async function testSupplyChain() {
const results = []
// 1. Создание поставки
const supply = await createSupply({
type: 'FULFILLMENT_GOODS',
items: [{ productId: 'test', quantity: 10 }]
})
results.push(supply.success ? '✅ Создание поставки' : '❌ Создание поставки')
// 2. Обновление статуса
const statusUpdate = await updateSupplyStatus(supply.id, 'IN_PROGRESS')
results.push(statusUpdate.success ? '✅ Обновление статуса' : '❌ Обновление статуса')
// 3. Генерация отчета
const report = await generateSupplyReport(supply.id)
results.push(report.success ? '✅ Отчеты работают' : '❌ Отчеты сломаны')
return results
}
```
**2. Тест заказов поставщиков:**
```bash
# Тест workflow заказов
node tests/supplier-orders-workflow.js
# Проверка уведомлений
# Проверка статусов заказов
# Проверка расчетов
```
#### 📊 ПОЛНАЯ ДИАГНОСТИКА СИСТЕМЫ ПОСЛЕ ФАЗЫ 4:
```bash
# Состояние миграции
echo "=== MIGRATION STATUS ==="
grep -r "useAuthContext" src/ | wc -l # Ожидаемо: ~50+
grep -r "useAuth" src/ | grep -v "useAuthContext" | wc -l # Ожидаемо: ~10-15
# Performance metrics
echo "=== PERFORMANCE ==="
node scripts/performance-benchmark.js
# Memory usage
echo "=== MEMORY ==="
node --expose-gc scripts/memory-test.js
# Error rates
echo "=== ERROR MONITORING ==="
grep "ERROR" logs/app.log | tail -100
```
#### 🛑 STOP CONDITIONS ДЛЯ ФАЗЫ 4:
- Supply chain workflow broken → IMMEDIATE ROLLBACK
- Data corruption in orders → IMMEDIATE ROLLBACK
- Performance degradation > 50% → INVESTIGATE
- Memory usage > baseline + 30% → OPTIMIZE
---
### 🔴 CHECKPOINT FINAL - ПОСЛЕ ФАЗЫ 5 (Финализация)
#### 🎯 ПОЛНОЕ РЕГРЕССИОННОЕ ТЕСТИРОВАНИЕ:
**1. Автоматизированный тест всех функций:**
```bash
# Запуск полного test suite
npm run test:e2e
npm run test:integration
npm run test:security
# Ожидаемо: 100% pass rate
```
**2. Нагрузочное тестирование:**
```bash
# Симуляция 100 одновременных пользователей
npm run test:load
# Проверка стабильности при нагрузке
# Проверка memory leaks
# Проверка response times
```
**3. Безопасность финальная:**
```bash
# Security audit
npm audit
npm run test:security
# Проверка отсутствия useAuth
grep -r "import.*useAuth" src/ | grep -v "useAuthContext"
# Ожидаемо: ТОЛЬКО в useAuth.ts файле (если оставляем для compatibility)
```
#### 📊 ФИНАЛЬНЫЕ МЕТРИКИ:
```bash
echo "=== FINAL MIGRATION REPORT ==="
echo "Components migrated: $(grep -r "useAuthContext" src/ | wc -l)"
echo "Components remaining: $(grep -r "useAuth" src/ | grep -v "useAuthContext" | wc -l)"
echo "Performance improvement: $(node scripts/performance-compare.js)"
echo "Memory reduction: $(node scripts/memory-compare.js)"
echo "API calls reduction: $(node scripts/api-calls-compare.js)"
```
**Ожидаемые результаты:**
- ✅ Components migrated: 56+
- ✅ Components remaining: 0 (кроме useAuth.ts если оставляем)
- ✅ Performance improvement: 80%+
- ✅ Memory reduction: 85%+
- ✅ API calls reduction: 90%+
#### 🛑 FINAL APPROVAL CONDITIONS:
- Все e2e тесты пройдены: ✅/❌
- Нагрузочные тесты стабильны: ✅/❌
- Security audit чистый: ✅/❌
- Performance targets достигнуты: ✅/❌
- No critical bugs: ✅/❌
**ТОЛЬКО при 100% SUCCESS → Миграция считается ЗАВЕРШЕННОЙ**
---
### 🔴 КРИТИЧЕСКИЕ ТЕСТЫ (ПОСЛЕ КАЖДОГО ЭТАПА)
**1. Базовая аутентификация:**
```javascript
// Тест в browser console
localStorage.setItem('authToken', 'valid_token')
window.location.reload()
// Проверить: пользователь автоматически авторизован
```
**2. Переключение ролей:**
```bash
# Селлер пытается зайти в фулфилмент
GET /fulfillment/dashboard
# Ожидаемо: редирект на /seller/dashboard
```
**3. Регистрационный flow:**
- SMS код → Верификация → Выбор типа → Создание организации → Dashboard
### 📋 ИНТЕГРАЦИОННЫЕ ТЕСТЫ
**1. Синхронизация состояния:**
- Обновить профиль → Проверить sidebar → Проверить user-settings
**2. API ключи:**
- Добавить WB ключ → Проверить статистику → Проверить настройки
**3. Роли и доступы:**
- Каждая роль → Проверить доступные разделы → Проверить запрещенные разделы
---
## 📈 ПЛАН ПРОИЗВОДИТЕЛЬНОСТИ
### ⚡ ОПТИМИЗАЦИИ
**1. Устранение дублирования состояния:**
- До: 56 компонентов × useState = 56 экземпляров состояния
- После: 1 AuthContext = 1 глобальное состояние
- Экономия памяти: ~85%
**2. Уменьшение API запросов:**
- До: Каждый useAuth делает GET_ME при монтировании
- После: 1 запрос в AuthContext для всех компонентов
- Экономия запросов: ~90%
**3. Улучшение UX:**
- Мгновенная синхронизация данных между компонентами
- Нет задержек при обновлении профиля
- Консистентное состояние загрузки
---
## 🎯 SUCCESS CRITERIA
### ✅ ОБЯЗАТЕЛЬНЫЕ РЕЗУЛЬТАТЫ
**Безопасность:**
- [ ] Нет security holes в авторизации ролей
- [ ] Все компоненты используют AuthContext
- [ ] Нет утечек состояния между useAuth и AuthContext
**Функциональность:**
- [ ] Все типы регистрации работают
- [ ] SMS верификация стабильна
- [ ] Профили синхронизируются
- [ ] API ключи сохраняются
**Производительность:**
- [ ] Время загрузки < 2 секунд
- [ ] Memory usage снижен на 80%+
- [ ] API запросы сокращены на 85%+
**UX:**
- [ ] Нет infinite loops
- [ ] Мгновенное обновление интерфейса
- [ ] Стабильная работа во всех браузерах
---
## 📞 ПЛАН КОММУНИКАЦИИ
### 🚨 КРИТИЧЕСКИЕ УВЕДОМЛЕНИЯ
**Команде разработки:**
- Начало каждой фазы: Slack + Email
- Критические проблемы: Немедленный звонок
- Успешное завершение: Отчет в Slack
**Бизнес-команде:**
- Ежедневные отчеты о прогрессе
- Уведомления о рисках заранее
- Финальный отчет с метриками
### 📅 ГРАФИК УВЕДОМЛЕНИЙ
| Время | Событие | Кому | Канал |
|-------|---------|------|-------|
| Старт фазы | Начало миграции | Dev team | Slack |
| +2 часа | Checkpoint Alpha | Dev + QA | Slack |
| +24 часа | Фаза 1 завершена | Все | Email |
| +48 часов | Фаза 2 завершена | Все | Email |
| Завершение | Полная миграция | Все | Meeting |
---
## 📋 CHECKLIST ВЫПОЛНЕНИЯ
### 🔥 ФАЗА 1: КРИТИЧЕСКАЯ (24 часа)
- [ ] useRoleGuard.ts мигрирован
- [ ] app/page.tsx мигрирован
- [ ] auth-flow.tsx исправлен (убран window.reload)
- [ ] sms-step.tsx мигрирован
- [ ] Checkpoint Alpha пройден
- [ ] Безопасность ролей работает
- [ ] Регистрация стабильна
### 🔥 ФАЗА 2: ПРОФИЛИ (48 часов)
- [ ] user-settings.tsx мигрирован
- [ ] confirmation-step.tsx мигрирован
- [ ] Профили синхронизируются с sidebar
- [ ] API ключи работают
- [ ] Все типы регистрации протестированы
### 🔥 ФАЗА 3: БИЗНЕС (72 часа)
- [ ] dashboard-home.tsx мигрирован
- [ ] economics компоненты мигрированы
- [ ] warehouse дашборды мигрированы
- [ ] Все типы пользователей протестированы
### 🔥 ФАЗА 4: ПОСТАВКИ (96 часов)
- [ ] Создание поставок мигрировано
- [ ] Управление поставками мигрировано
- [ ] Отчеты мигрированы
- [ ] Full supply chain workflow протестирован
### 🔥 ФАЗА 5: ФИНАЛИЗАЦИЯ (120+ часов)
- [ ] Все домашние страницы мигрированы
- [ ] Специализированные компоненты мигрированы
- [ ] useAuth.ts удален из кодовой базы
- [ ] Полное регрессионное тестирование
---
## 🎯 ЗАКЛЮЧЕНИЕ
Данный план обеспечивает **безопасную поэтапную миграцию** с минимальным риском для бизнеса.
**Ключевые принципы:**
- **Safety First** - безопасность превыше скорости
- **Test Everything** - тестирование на каждом шаге
- **Rollback Ready** - готовность к откату в любой момент
- **Monitor Always** - постоянный мониторинг состояния
**Ожидаемые результаты:**
- Устранение критических уязвимостей безопасности
- Стабильная работа всех компонентов
- Улучшение производительности на 80%+
- Единое состояние аутентификации для всего приложения
**Временные рамки:** 5-7 дней активной разработки + тестирование
---
*Документ подготовлен: 18.09.2025*
*Статус: ГОТОВ К ВЫПОЛНЕНИЮ*
*Приоритет: КРИТИЧЕСКИЙ*