# 🎯 ПЛАН ИСПРАВЛЕНИЯ АРХИТЕКТУРЫ РОУТИНГА 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 - Подготовка и анализ