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

34 KiB
Raw Blame History

🚨 ПЛАН БЕЗОПАСНОЙ МИГРАЦИИ: 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 минут)

# 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 - КРИТИЧЕСКАЯ ПРОВЕРКА

Обязательные тесты перед продолжением:

  1. Безопасность ролей:

    # Тест: попытка доступа селлера к фулфилменту
    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

Детальный план:

// КРИТИЧЕСКАЯ ЗАМЕНА:
// 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 (восстановление состояния при ошибках)

Пошаговая миграция:

  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

Для каждой фазы:

# 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 завершена Все 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
Статус: ГОТОВ К ВЫПОЛНЕНИЮ
Приоритет: КРИТИЧЕСКИЙ