# 🎯 ПЛАН ИСПРАВЛЕНИЯ АРХИТЕКТУРЫ РОУТИНГА SFERA > **Цель:** Исправить критическую ошибку архитектуры где регистрация происходит на `/dashboard` --- ## 🚨 ТЕКУЩАЯ ПРОБЛЕМА ### ❌ Что не работает: - **Регистрация идет на `/dashboard`** - семантически неправильно - **AuthGuard создает второй AuthFlow** на dashboard при незавершенной регистрации - **Логическое противоречие:** dashboard = для авторизованных, но используется для регистрации - **Пользователь запутывается** в flow регистрации ### 🔍 Корневая причина: ``` SMS верификация → токен есть → isAuthenticated: true AuthContext → user: {...} НО user.organization: null AuthGuard → видит "незавершенная регистрация" → создает НОВЫЙ AuthFlow Результат → сброс на step: "phone" вместо продолжения регистрации ``` --- ## 🎯 ЦЕЛЕВАЯ АРХИТЕКТУРА ### ✅ Правильная структура URL: | URL | Назначение | Пользователи | Компонент | |-----|------------|--------------|-----------| | `/` | Корневая страница (роутер) | Все | `app/page.tsx` - логика перенаправления | | `/login` | Вход в систему | Неавторизованные | `AuthFlow` без параметров | | `/register` | Регистрация | Неавторизованные + незавершенная регистрация | `AuthFlow` с поддержкой кодов | | `/dashboard` | Панель управления | ✅ Авторизованные с организацией | `DashboardHome` через `AuthGuard` | ### 🔄 Логика перенаправлений: ```typescript // app/page.tsx if (isLoading) return if (user?.organization) { // Полностью авторизован → в dashboard router.replace('/dashboard') } else if (user && !user.organization) { // Незавершенная регистрация → продолжить на /register router.replace('/register') } else { // Не авторизован → на /login router.replace('/login') } ``` --- ## 📋 ДЕТАЛЬНЫЙ ПЛАН РЕАЛИЗАЦИИ ### **PHASE 1: ПОДГОТОВКА И АНАЛИЗ** #### 1.1 Анализ текущих страниц авторизации ```bash # Проверить содержимое: - src/app/login/page.tsx - src/app/register/page.tsx - src/app/dashboard/page.tsx - src/components/auth-guard.tsx ``` #### 1.2 Анализ AuthFlow размещения - Где сейчас рендерится AuthFlow - Какие параметры принимает - Как обрабатывает незавершенную регистрацию #### 1.3 Проверка всех redirect/router.replace ```bash # Найти все места перенаправлений grep -r "router.replace\|redirect" src/ ``` --- ### **PHASE 2: СОЗДАНИЕ НОВОЙ АРХИТЕКТУРЫ** #### 2.1 Исправить app/page.tsx (корневой роутер) **БЫЛО:** ```typescript if (user) { router.replace('/dashboard') // Неправильно! } else { router.replace('/login') } ``` **БУДЕТ:** ```typescript if (isLoading) return if (user?.organization) { // Пользователь полностью зарегистрирован router.replace('/dashboard') } else if (user && !user.organization) { // Пользователь авторизован, но регистрация не завершена router.replace('/register') } else { // Пользователь не авторизован router.replace('/login') } ``` #### 2.2 Исправить /dashboard/page.tsx **БЫЛО:** ```typescript {/* Показывает AuthFlow при незавершенной регистрации */} ``` **БУДЕТ:** ```typescript }> ``` #### 2.3 Обновить /register/page.tsx **Должен обрабатывать:** - Новую регистрацию (нет токена) - Незавершенную регистрацию (есть токен, нет организации) - Параметры партнерских/реферальных кодов #### 2.4 Обновить /login/page.tsx **Только для входа** (без регистрации) --- ### **PHASE 3: ОБНОВЛЕНИЕ КОМПОНЕНТОВ** #### 3.1 Создать RedirectToRegister компонент ```typescript // components/auth/redirect-to-register.tsx export function RedirectToRegister() { const router = useRouter() useEffect(() => { router.replace('/register') }, []) return
Перенаправление на регистрацию...
} ``` #### 3.2 Обновить AuthGuard логику - НЕ показывать AuthFlow на /dashboard - Перенаправлять на /register при незавершенной регистрации - Добавить проверку pathname #### 3.3 Обновить AuthFlow состояния - Правильно обрабатывать состояние при незавершенной регистрации - Убрать конфликты между экземплярами AuthFlow --- ### **PHASE 4: ИСПРАВЛЕНИЕ AUTH-FLOW** #### 4.1 Убрать window.location.href **БЫЛО:** ```typescript window.location.href = '/dashboard' ``` **БУДЕТ:** ```typescript router.push('/dashboard') ``` #### 4.2 Исправить логику завершения регистрации - После создания организации → redirect на `/dashboard` - При ошибке → остаться на `/register` #### 4.3 Обновить логику инициализации AuthFlow - Определять текущий шаг на основе состояния пользователя - Учитывать что пользователь может попасть на /register с токеном --- ## 🧪 ПЛАН ТЕСТИРОВАНИЯ ### **TEST CASE 1: Новый пользователь** ``` 1. Открыть / → перенаправление на /login 2. Ввести телефон → SMS step 3. Ввести SMS → cabinet-select step 4. Выбрать тип → inn/api step 5. Завершить → /dashboard ``` ### **TEST CASE 2: Незавершенная регистрация** ``` 1. Пользователь с токеном без организации 2. Открыть / → перенаправление на /register 3. AuthFlow определяет нужный шаг 4. Продолжить с правильного места 5. Завершить → /dashboard ``` ### **TEST CASE 3: Авторизованный пользователь** ``` 1. Пользователь с токеном и организацией 2. Открыть / → перенаправление на /dashboard 3. Открыть /register → перенаправление на /dashboard 4. Открыть /login → перенаправление на /dashboard ``` ### **TEST CASE 4: Партнерские коды** ``` 1. Открыть /register?partner=FF_123_456 2. AuthFlow получает partnerCode 3. Проходит регистрацию с партнерским кодом 4. Завершить → /dashboard ``` --- ## ⚠️ КРИТИЧЕСКИЕ МОМЕНТЫ ### 🔒 Безопасность: - `/dashboard` должен быть доступен ТОЛЬКО авторизованным с организацией - AuthGuard НЕ должен показывать формы регистрации на защищенных страницах - Проверить все места где используется AuthGuard ### 🔄 Обратная совместимость: - Существующие ссылки на `/dashboard` должны работать - Незавершенные регистрации не должны ломаться - SMS коды и токены должны продолжать работать ### 📱 UX: - Пользователь не должен видеть мерцания и перезагрузки - Четкие состояния загрузки - Понятные сообщения об ошибках --- ## 🛠️ ФАЙЛЫ ДЛЯ ИЗМЕНЕНИЯ ### Обязательные изменения: - `src/app/page.tsx` - корневая логика роутинга - `src/app/dashboard/page.tsx` - убрать AuthFlow fallback - `src/app/register/page.tsx` - обработка незавершенной регистрации - `src/app/login/page.tsx` - только для входа - `src/components/auth-guard.tsx` - новая логика перенаправлений - `src/components/auth/auth-flow.tsx` - убрать window.location.href ### Новые компоненты: - `src/components/auth/redirect-to-register.tsx` - компонент перенаправления ### Тестирование: - Все flow регистрации - Все типы пользователей - Партнерские и реферальные коды --- ## 📊 КРИТЕРИИ УСПЕХА ✅ **Функциональные:** - Новая регистрация проходит полностью - Незавершенная регистрация продолжается с нужного шага - Авторизованные пользователи попадают в dashboard - Партнерские коды работают ✅ **Технические:** - Нет создания второго AuthFlow - Нет бесконечных перенаправлений - ESLint и TypeScript без ошибок - Приложение собирается ✅ **UX:** - Логичные URL для пользователей - Никаких неожиданных сбросов формы - Плавные переходы между шагами --- ## 🚀 ГОТОВНОСТЬ К РЕАЛИЗАЦИИ План детально проработан. Готов к пошаговой реализации: 1. ✅ Анализ проблемы завершен 2. ✅ Архитектура спроектирована 3. ✅ План реализации детализирован 4. ✅ Тест-кейсы подготовлены 5. ✅ Критерии успеха определены **Следующий шаг:** Начать PHASE 1 - Подготовка и анализ