
• Полная миграция 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>
34 KiB
🚨 ПЛАН БЕЗОПАСНОЙ МИГРАЦИИ: 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
Проблема: Обновления не отражаются в интерфейсе
Бизнес-риск: Пользователи думают что система не работает
🛡️ СТРАТЕГИЯ БЕЗОПАСНОЙ МИГРАЦИИ
🎯 ПРИНЦИПЫ:
- Rollback First - каждое изменение должно иметь план отката
- Test Everything - тестирование на каждом этапе
- Monitor Always - мониторинг состояния на каждом шаге
- Backup Critical - резервные копии критических компонентов
- 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 минут)
# Backup
cp src/hooks/useRoleGuard.ts src/hooks/useRoleGuard.ts.backup
# Rollback plan
git stash push -m "useRoleGuard migration rollback point"
Изменения:
// 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 минут)
Изменения:
// 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:
cp src/components/auth/auth-flow.tsx src/components/auth/auth-flow.tsx.backup
git stash push -m "auth-flow migration rollback point"
Изменения:
// ОПАСНЫЙ КОД (УДАЛИТЬ):
if (isAuthenticated && user && !user.organization) {
localStorage.removeItem('authToken')
window.location.reload() // 🚨 CAUSES INFINITE LOOPS
}
// БЕЗОПАСНЫЙ КОД:
if (isAuthenticated && user && !user.organization) {
logout() // Use AuthContext logout method
}
Детальная замена:
// 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 минут)
Изменения:
// BEFORE
import { useAuth } from '@/hooks/useAuth'
const { verifySmsCode } = useAuth()
// AFTER
import { useAuthContext } from '@/contexts/AuthContext'
const { verifySmsCode } = useAuthContext()
Тестирование:
- SMS коды работают для новых пользователей
- SMS коды работают для существующих пользователей
- Правильные редиректы после верификации
- Состояние пользователя синхронизировано
📋 CHECKPOINT ALPHA - КРИТИЧЕСКАЯ ПРОВЕРКА
Обязательные тесты перед продолжением:
-
Безопасность ролей:
# Тест: попытка доступа селлера к фулфилменту curl -H "Authorization: Bearer SELLER_TOKEN" http://localhost:3000/fulfillment/dashboard # Ожидаемый результат: 403 или редирект
-
Регистрационный flow:
- Регистрация нового селлера: ✅/❌
- Регистрация нового фулфилмента: ✅/❌
- SMS верификация: ✅/❌
- Завершение регистрации: ✅/❌
-
Состояние системы:
- Нет ошибок в консоли: ✅/❌
- Сайдбар синхронизирован: ✅/❌
- Роутинг работает: ✅/❌
🛑 STOP CONDITIONS: Если любой из тестов провален → ROLLBACK всех изменений фазы 1
🔥 ФАЗА 2: ПРОФИЛИ И НАСТРОЙКИ (24-48 часов)
🎯 ЭТАП 2.1: ПОЛЬЗОВАТЕЛЬСКИЕ ДАННЫЕ
2.1.1 user-settings.tsx - СРЕДНИЙ РИСК (60 минут)
Особенности миграции:
- Компонент использует
updateUser
для мгновенного обновления sidebar - Сложная логика сохранения профиля и организации
- API ключи должны синхронизироваться с AuthContext
Детальный план:
// КРИТИЧЕСКАЯ ЗАМЕНА:
// BEFORE
const { user, updateUser } = useAuth()
// AFTER
const { user, updateUser } = useAuthContext()
Тестирование:
- Изменения профиля отражаются в sidebar немедленно
- API ключи сохраняются и отображаются
- Аватар обновляется корректно
- Организационные данные синхронизируются
2.1.2 confirmation-step.tsx - ВЫСОКАЯ СЛОЖНОСТЬ (120 минут)
⚠️ СПЕЦИАЛЬНАЯ ОСТОРОЖНОСТЬ: Этот компонент содержит критическую бизнес-логику создания организаций с системой rollback.
Анализ сложности:
// Три разных метода регистрации:
const {
registerFulfillmentOrganization, // Для фулфилмента/логистики/опта
registerSellerOrganization, // Для селлеров
registerOrganization // Новый универсальный
} = useAuth()
// A/B тестирование между методами (линии 50, 88-111)
// Rollback механизм в useAuth (восстановление состояния при ошибках)
Пошаговая миграция:
- Проверить что все три метода есть в AuthContext ✅
- Заменить импорт
- Протестировать каждый тип организации отдельно
- Проверить rollback механизм работает
Критическое тестирование:
- Фулфилмент регистрация с ИНН
- Селлер регистрация с API ключами
- Универсальная регистрация
- Rollback при ошибках сети
- Партнерские и реферальные коды
🔥 ФАЗА 3: БИЗНЕС-КОМПОНЕНТЫ (48-72 часа)
🎯 ЭТАП 3.1: ДАШБОРДЫ И СТАТИСТИКА
Приоритетные компоненты:
dashboard-home.tsx
- главная страница всех ролейeconomics-page-wrapper.tsx
- экономические данныеfulfillment-warehouse-dashboard/index.tsx
- управление складомsupplier-orders-tabs-v2.tsx
- заказы поставщиков
Стратегия миграции:
- Один дашборд за раз
- Полное тестирование каждого типа пользователя
- Проверка доступа к данным
🎯 ЭТАП 3.2: КОММУНИКАЦИИ И СЕРВИСЫ
Компоненты:
messenger-chat.tsx
- система сообщенийfile-uploader.tsx
- загрузка файлов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
Для каждой фазы:
# 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. Тест авторизации ролей (КРИТИЧЕСКИЙ):
# Создаем тестовых пользователей каждой роли
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. Тест регистрационного потока (КРИТИЧЕСКИЙ):
// Автоматизированный тест в 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. Диагностика состояния системы:
# Проверка отсутствия 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:
# Время загрузки главной страницы
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. Тест синхронизации профиля:
// Тест обновления профиля и отражения в 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 ключей:
# Добавление 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. Тест создания организаций:
// Тест всех трех методов регистрации
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:
# Проверка количества мигрированных компонентов
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. Тест дашбордов всех ролей:
# Создаем полный workflow тест
node tests/business-dashboard-test.js
# Тест доступа к экономическим данным
# Тест доступа к складским данным
# Тест доступа к заказам поставщиков
2. Тест целостности данных:
// Проверка что все типы пользователей видят правильные данные
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:
# 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 тест поставок:
// Полный цикл: создание → управление → отчеты
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. Тест заказов поставщиков:
# Тест workflow заказов
node tests/supplier-orders-workflow.js
# Проверка уведомлений
# Проверка статусов заказов
# Проверка расчетов
📊 ПОЛНАЯ ДИАГНОСТИКА СИСТЕМЫ ПОСЛЕ ФАЗЫ 4:
# Состояние миграции
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. Автоматизированный тест всех функций:
# Запуск полного test suite
npm run test:e2e
npm run test:integration
npm run test:security
# Ожидаемо: 100% pass rate
2. Нагрузочное тестирование:
# Симуляция 100 одновременных пользователей
npm run test:load
# Проверка стабильности при нагрузке
# Проверка memory leaks
# Проверка response times
3. Безопасность финальная:
# Security audit
npm audit
npm run test:security
# Проверка отсутствия useAuth
grep -r "import.*useAuth" src/ | grep -v "useAuthContext"
# Ожидаемо: ТОЛЬКО в useAuth.ts файле (если оставляем для compatibility)
📊 ФИНАЛЬНЫЕ МЕТРИКИ:
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. Базовая аутентификация:
// Тест в browser console
localStorage.setItem('authToken', 'valid_token')
window.location.reload()
// Проверить: пользователь автоматически авторизован
2. Переключение ролей:
# Селлер пытается зайти в фулфилмент
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 завершена | Все | |
+48 часов | Фаза 2 завершена | Все | |
Завершение | Полная миграция | Все | 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
Статус: ГОТОВ К ВЫПОЛНЕНИЮ
Приоритет: КРИТИЧЕСКИЙ